我想比较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吗?
答案 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; (按哈希顺序)。