我有两个文件有一些共同点。
file1的值由“;”
分隔20160301 000000;0.713290;0
20160301 000001;0.713270;0
20160301 000003;0.713280;0
20160301 000005;0.713270;0
20160301 000006;0.713280;0
20160301 000010;0.713250;0
20160301 000011;0.713260;0
20160301 000012;0.713260;0
20160301 000013;0.713260;0
...
file2的:
20160301 000000
20160301 000001
20160301 000003
期望的输出:
20160301 000000;0.713290;0
20160301 000001;0.713270;0
20160301 000003;0.713280;0
我已经尝试了grep -f
,但由于两个文件(file1& file 2)都很庞大,我花了很长时间才能完成。
我正在寻找使用awk
答案 0 :(得分:1)
awk -F';' 'NR==FNR{a[$0];next} $1 in a' file2 file1
给出你的新输入,其中file2行可以有尾随空白字符:
$ tr ' ' '#' < file1
20160301#000000;0.713290;0
20160301#000001;0.713270;0
20160301#000003;0.713280;0
20160301#000005;0.713270;0
20160301#000006;0.713280;0
20160301#000010;0.713250;0
20160301#000011;0.713260;0
20160301#000012;0.713260;0
20160301#000013;0.713260;0
...
$ tr ' ' '#' < file2
20160301#000000##
20160301#000001##
20160301#000003
$ awk -F';' 'NR==FNR{sub(/ +$/,""); a[$0];next} $1 in a' file2 file1
20160301 000000;0.713290;0
20160301 000001;0.713270;0
20160301 000003;0.713280;0
答案 1 :(得分:1)
如果您的文件已经在关键字段中排序(如您的情况那样)
$ join -t';' file1 file2
1 1;adc;01
2 2;efg;02
3 3;hij;03
这是join
命令的典型用例。如果没有排序,您可以传递已排序的输出
$ $ join -t';' <(sort file1) <(sort file2)
答案 2 :(得分:0)
也许:
awk 'NR==FNR{A[$1];next}$1 in A' file2 file1
这是未经测试的,我在我的牢房中,所以如果这不是你想要的话,我道歉:)