awk脚本和for循环

时间:2015-04-11 04:59:38

标签: 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

我试图从数据集中依次提取第二个文件的相应第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 

抛出语法错误。

1 个答案:

答案 0 :(得分:5)

回答本问题的第3版

$ 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中,如果是,则打印出相应的值。

相关问题