我有一个数据集如下(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文件?
答案 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
中,则打印第二个字段。