假设我们有~/file1
:
line1
line2
line3
...和~/file2
:
line1
lineNEW
line3
请注意,除line2
与lineNEW
不同外,两个文件几乎完全相同。
问题:如何合并这两个文件以生成如下所示的文件:
line1
line2
lineNEW
line3
也就是说,如何合并这两个文件,以便将所有唯一行捕获(不重叠)到第三个文件中?请注意,行的顺序并不重要(只要捕获所有唯一行)。
答案 0 :(得分:1)
awk '{
print
getline line < second
if ($0 != line) print line
}' second=file2 file1
会这样做
答案 1 :(得分:1)
考虑下面的命令。它更加健壮,因为它也适用于添加了新行而不是替换的文件(参见下面的f1和f2)。
首先,我使用你的文件执行它。我将命令分成两行,以便它很好地适应“代码块”:
$ (awk '{ print NR, $0 }' file1; awk '{ print NR, $0 }' file2) |\
sort -k 2 | uniq -f 1 | sort | cut -d " " -f 2-
它产生您的预期输出:
line1
line2
lineNEW
line3
我还使用了这两个额外的文件来测试它:
F1:
line1 stuff after a tab
line2 line2
line3
line4
line5
line6
F2:
line1 stuff after a tab
lineNEW
line2 line2
line3
line4
line5
line6
这是命令:
$ (awk '{ print NR, $0 }' f1; awk '{ print NR, $0 }' f2) |\
sort -k 2 | uniq -f 1 | sort | cut -d " " -f 2-
它产生这个输出:
line1 stuff after a tab
line2 line2
lineNEW
line3
line4
line5
line6
答案 2 :(得分:1)
如果您不关心订单,只需对它们进行排序:
cat ~/file1 ~/file2 | sort -u > ~/file3