我有一个数据集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
我试图从数据集中依次提取第二个文件的相应第2列元素。
我使用过:awk -F " " '$1==752 {print $2}' t.txt >> t2.txt
如何为上述指令使用for循环并将其填充到一个文本文件中而不是一个一个地填充?
752的输出将是694.这个694应该写在不同的文本文件中。对于812,它应该给我820. 694和820都应该写在同一个文本文件中。它应该解析到输入文件的末尾。
我在尝试:
for i in `cat t1.txt` | awk -F " " '$1==$i {print $2}' t.txt >> t2.txt
抛出语法错误。
答案 0 :(得分:5)
$ awk 'FNR==NR{a[$1]=1;next;} $1 in a {print $2;}' t1.txt t.txt
694
820
774
对于t1.txt
中的每一行,都会检查t.txt
的第1列中是否显示相同的数字。如果是,则打印同一行的第2列中的数字:
$ awk 'FNR==NR{a[$1]=$2;next} $1 in a {print a[$1]}' t.txt t1.txt
694
820
要将输出保存在文件t2.txt
中,请使用:
awk 'FNR==NR{a[$1]=$2;next} $1 in a {print a[$1]}' t.txt >t2.txt
FNR==NR{a[$1]=$2;next}
这将读取t.txt
并创建其值的数组a
。
$1 in a {print a[$1]}
对于文件t1.txt
中的每个数字,检查数字是否显示在数组a
中,如果是,则打印出相应的值。