Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 比较列_Unix_Awk - Fatal编程技术网

Unix 比较列

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,那么打印起来

我有两个文件:

文件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
,那么打印起来会容易得多:

$ 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