Unix - 并排打印公共线

时间:2016-05-31 16:19:34

标签: unix awk

我想比较2个未分类的文件并排打印公共线

File1中

a 1 2
b 2 4
c 1 4
e 1 2

文件2
a 0 3
c 1 4
d 3 4
b 2 4

output1

a 1 2 0 3
b 2 4 2 4
c 1 4 1 4

OUTPUT2
a 1 2 0 3
b 2 4 2 4
c 1 4 1 4
d 3 4
e 1 2

我可以使用Join实现,但我想使用awk找到一个命令。

我们可以在不对文件进行排序的情况下使用awk来获取output1和output2吗?

2 个答案:

答案 0 :(得分:0)

您可以使用GNU awk这样做:

<强> script.awk

awk -f script.awk file1 file2

像这样使用它:PROCINFO

.each()对gnu awk来说很特别。如果你不需要排序而且没有gnu awk,你可以注释掉第一行,看看会发生什么。

答案 1 :(得分:0)

$ awk '
    NR==FNR {line[$1]=$0; next} 
    $1 in line {
        f2fields = gensub($1 FS, "", 1)
        print line[$1], f2fields > "output1"
        print line[$1], f2fields > "output2"
        seen[$1]++
        next
    } 
    {print > "output2"} 
    END { for (key in line) if (!(key in seen)) print line[key] > "output2" }
' file1 file2

$ cat output1
a 1 2 0 3
c 1 4 1 4
b 2 4 2 4

$ cat output2
a 1 2 0 3
c 1 4 1 4
d 3 4
b 2 4 2 4
e 1 2

输出{1,2}文件的顺序由1)file2的记录顺序决定,然后2)未出现在file2中的file1的记录被输出&#34;随机&#34; (按哈希顺序)。