【发布时间】:2018-12-17 21:47:45
【问题描述】:
我有两个文件。
file1 有一些以 abc 开头的键在第二列
et1 abc
et2 abc
et55 abc
file2 具有第 1 列的值和一些我需要加起来的其他数字:
1 2 3 4 5 et1
5 5 5 5 5 et100
3 3 3 3 3 et55
5 5 5 5 4 et1
6 6 6 6 3 et1
对于文件1中提取的键,如果匹配,我需要将对应的第5列相加。 File2本身很大
这个命令似乎可以工作,但速度很慢:
egrep -isr "abc" file1.tcl | awk '{print $1}' | grep -vwf /dev/stdin file2.tcl | awk '{tl+=$5} END {print tl}'
我将如何优化管道。还有我用 grep -f 做错了什么。是不是一般不建议做这样的事情。
编辑:当 file1 中存在 column6 键时,预期输出是 file2 中所有 column5 的总和
Edit2:预期输出:由于文件 1 具有键“et1、et2 和 et55”,因此在文件 2 中将第 5 列与第 1、3、4 和 5 行中的匹配键相加,预期输出为 [5+3+ 4+3=15]
【问题讨论】:
-
请将该示例输入的所需输出添加到您的问题中。
-
管道 grep 到 awk 几乎总是多余的,因为 awk 具有内置的正则表达式匹配。
-
-r选项在您 grepping 特定文件时不是必需的,没有可递归到的目录。 -
当 file1 中存在 column6 键时,预期输出是 file2 中所有 column5 的总和
-
不要只是告诉我们,要展示给我们看。 edit您的问题以显示预期的输出。