【发布时间】:2015-06-16 22:22:18
【问题描述】:
我有一个数据集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
这是抛出语法错误。
【问题讨论】:
-
请显示您想要的输出。比如第二个文件包含856,你要打印什么?
-
对于
t1.txt中读取856 的行,您要打印什么? 856 未出现在t.txt中。对于读取 728 的行,您要打印什么? 728 确实出现在t.txt中,但仅出现在第 2 列中,而您的其他示例用于在第 1 列中匹配。更好的是,只需从给定的示例输入中显示您想要的完整输出。 -
输入文件有 1650 行。但是,对于像 856 这样的情况,迭代可以继续到 t1.txt 的下一行,而对 856 不做任何事情。