我有两个文件。
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
对于file1中提取的键,如果匹配,我需要加起来对应的第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”,因此在file2中将第5列与第1,3,4和5行中的匹配键相加,因此预期输出为[5 + 3 + 4 + 3 = 15]
答案 0 :(得分:1)
使用单个awk
将file1
读入数组的键。然后,在读取file2
时,当$5
在数组中时,将$6
添加到总变量中。
awk 'NR==FNR {if ($2 == "abc") a[$1] = 0;
next}
$6 in a {total += $5}
END { print total }
' file1.tcl file2.tcl
答案 1 :(得分:1)
请先阅读Input_file2.tcl并减少循环,然后尝试以下操作。由于您的预期输出不清楚,因此尚未完全测试。
awk 'FNR==NR{a[$NF]+=$(NF-1);next} $2=="abc"{print $1,a[$1]+0}' file2.tcl file1.tcl