awk脚本以递归方式返回结果

时间:2015-04-11 15:16:43

标签: for-loop awk

我有一个数据集如下(t.txt):

827 819
830 826
828 752
752 694
828 728
821 701
724 708
826 842
719 713
764 783
812 820
829 696
697 849
840 803
752 774

我有第二个文件(t1.txt):

752
728
856
693
713
792
812
706
737
751
745

我正在尝试使用for循环从第一个数据集中提取第二个文件的第2列元素。

我试过了:

for i in `cat t1.txt`
do 
awk -F " " '$1=i {print $2}' t.txt > t0.txt
done

所需的输出是:

694
820
774

不幸的是我得到一个空白文件。

我尝试手动执行此操作:awk -F " " '$1==752 {print $2}' t.txt > t0.txt

获得的结果是

694
774

如何一次性完成整个t1文件?

1 个答案:

答案 0 :(得分:1)

最简单的方法:使用join

$ join -o 1.2 <(sort t.txt) <(sort t1.txt)
694
774
820

join要求在比较字段(默认字段1)上对文件进行词法排序。 -o选项指示join从第一个文件输出第二个字段。

使用awk

$ awk 'NR==FNR {key[$1]; next} $1 in key {print $2}' t1.txt t.txt
694
820
774

会记住t1.txt中的密钥,然后循环t.txt(当累计记录编号NR不等于文件的记录编号FNR时),如果第一个字段出现在t1中,则打印第二个字段。