Unix 比较列
我有两个文件: 文件1 文件2 我想比较file1和file2的第3列,然后像这样打印file2的整行Unix 比较列,unix,awk,Unix,Awk,我有两个文件: 文件1 文件2 我想比较file1和file2的第3列,然后像这样打印file2的整行 a 0 1 h f b 0 3 h f d 0 5 h f 我尝试使用awk但我正在打印第3列: awk 'NR == FNR {f2[$3]=$1; next} $1 in f2{print f2[$1],$1}' file2 file1 如何从文件2打印整行?如果您先给出file1,那么打印起来
a 0 1 h f
b 0 3 h f
d 0 5 h f
我尝试使用awk
但我正在打印第3列:
awk 'NR == FNR {f2[$3]=$1; next} $1 in f2{print f2[$1],$1}' file2 file1
如何从文件2打印整行?如果您先给出
file1
,那么打印起来会容易得多:
$ awk 'NR==FNR{a[$1];next}$3 in a' file1 file2
a 0 1 h f
b 0 3 h f
d 0 5 h f
这样,如果字段3中的值在
file1
中,则可以轻松地在file2
中打印整行。默认块在awk
是{print$0}
中,因此它可以从{print$0}中的$3中省略它是否从文件1中获取唯一的数字,因为我看到lines@sudo_O@用户2133307我不知道你的意思是什么?如果来自file2
的字段3
中的值也位于file1
中,则整行将被打印。如果这不正确,请使用具有代表性的输入文件和预期的输出更新问题。例如,如果文件1有两个3或5(重复),例如1,2,3,4,3,5,5。它打印什么(仅打印一次)sudo___其他我发布的脚本不会打印文件1
中的任何内容。它只构建一个数组,在该数组中使用file1
中的唯一值进行比较,因为重复项没有帮助。您的意思是,如果值1
在file1
中有一次,但在file2,字段3
中有两次,那么输出应该只显示第一次匹配?如果这是一项要求,您需要编辑具有代表性的输入和预期输出的问题@user2133307-如果您关心的输入不符合您在问题中发布的输入格式(例如,具有重复的field3值),则更新您的问题以显示您实际关心的代表性输入加上该输入的预期输出。
awk 'NR == FNR {f2[$3]=$1; next} $1 in f2{print f2[$1],$1}' file2 file1
$ awk 'NR==FNR{a[$1];next}$3 in a' file1 file2
a 0 1 h f
b 0 3 h f
d 0 5 h f