For loop awk脚本和for循环

For loop awk脚本和for循环,for-loop,awk,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 752 728 856 693 713 792 812 706 737 751 745 我还有第二个文件t1.txt: 827 819 830 826 828 752 752 694 828 728 821 701 724 70

我有一个数据集
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
752
728
856
693
713
792
812
706
737
751
745
我还有第二个文件
t1.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
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 
这是抛出语法错误

回答这个问题的第三个版本 回答这个问题的第二个版本 对于
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

  • a{print a[$1]}中的$1

    对于文件
    t1.txt
    中的每个数字,检查该数字是否出现在数组
    a
    中,如果出现,则打印出相应的值


请显示所需的输出。例如,当第二个文件包含856时,您希望打印什么?对于
t1.txt
中读取856的行,您希望打印什么?856不出现在
t.txt
中。对于728行,您希望打印什么?728确实出现在
t.txt
中,但仅出现在第2列中,您的其他示例用于在第1列中进行匹配。更好的是,只需显示给定示例输入的完整输出。输入文件有1650行。然而,对于像856这样的情况,迭代可以继续到t1.txt的下一行,对856什么也不做。您的脚本也会得到第1列的值。我只需要第2列的值。如果t1.txt中的数字在第2列中。它可以省略,并继续到t1.txt中的下一个数字。所需的输出将仅为:694和820John1024 I已更改输入文件。获得的输出为:774 820,而期望输出为:694 774 820,因为有2个752John1024实例,感谢前面的回复。它可以调整为处理多个实例吗?可以调整为
awk'FNR==NR{a[$1]=a[$1]=a[$1]$2 ORS}$1,在a{printf(“%s”,a[$1])}t.txt t1.txt
中。总的原则是正确的。