差异从第二个文件中获取更改的行
Diff to get changed line from second file
我有两个文件 file1 和 file2。我想使用 diff.
打印添加到 file2 的新行
文件 1
/root/a
/root/b
/root/c
/root/d
file2
/root/new
/root/new_new
/root/a
/root/b
/root/c
/root/d
预期输出
/root/new
/root/new_new
我查看了手册页,但没有关于此的任何信息
关注 awk
可能会对您有所帮助。这将告诉您所有那些出现在 Input_file2 而不是 Input_file1.
中的行
awk 'FNR==NR{a[[=10=]];next} !([=10=] in a)' Input_file1 Input_file2
如果您不需要保留顺序,您可以使用 comm
命令,例如:
comm -13 <(sort file1) <(sort file2)
comm
比较 2 个排序的文件并打印 3 列输出。首先是 file1 独有的行,然后是 file2 独有的行,然后是两者共有的行。您可以隐藏任何列,因此我们在本示例中使用 -13
关闭 1 和 3,这样我们将只看到第二个文件独有的行。
或者您可以使用 grep
:
grep -wvFf file1 file2
这里我们使用 -f
让 grep 从 file1
获取它的模式。然后我们告诉它用 -F
将它们视为固定字符串而不是模式,用 -w
匹配整个单词,并只打印不匹配 -v
的行
尝试结合使用 diff 和 sed。
原始差异输出是:
$ diff file1 file2
0a1,2
> /root/new
> /root/new_new
添加 sed 以删除除以“>”开头的行以外的所有内容:
$ diff file1 file2 | sed -n -e 's/^> //p'
/root/new
/root/new_new
这样可以保留顺序。请注意,它还假定您只向第二个文件添加行。
我有两个文件 file1 和 file2。我想使用 diff.
打印添加到 file2 的新行
文件 1
/root/a
/root/b
/root/c
/root/d
file2
/root/new
/root/new_new
/root/a
/root/b
/root/c
/root/d
预期输出
/root/new
/root/new_new
我查看了手册页,但没有关于此的任何信息
关注 awk
可能会对您有所帮助。这将告诉您所有那些出现在 Input_file2 而不是 Input_file1.
awk 'FNR==NR{a[[=10=]];next} !([=10=] in a)' Input_file1 Input_file2
如果您不需要保留顺序,您可以使用 comm
命令,例如:
comm -13 <(sort file1) <(sort file2)
comm
比较 2 个排序的文件并打印 3 列输出。首先是 file1 独有的行,然后是 file2 独有的行,然后是两者共有的行。您可以隐藏任何列,因此我们在本示例中使用 -13
关闭 1 和 3,这样我们将只看到第二个文件独有的行。
或者您可以使用 grep
:
grep -wvFf file1 file2
这里我们使用 -f
让 grep 从 file1
获取它的模式。然后我们告诉它用 -F
将它们视为固定字符串而不是模式,用 -w
匹配整个单词,并只打印不匹配 -v
尝试结合使用 diff 和 sed。
原始差异输出是:
$ diff file1 file2
0a1,2
> /root/new
> /root/new_new
添加 sed 以删除除以“>”开头的行以外的所有内容:
$ diff file1 file2 | sed -n -e 's/^> //p'
/root/new
/root/new_new
这样可以保留顺序。请注意,它还假定您只向第二个文件添加行。