我有两个文件file1和file2。我想使用diff打印添加到file2的新行 file1
/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
我查看了手册页,但没有关于此
的任何信息答案 0 :(得分:2)
如果您不需要保留订单,可以使用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
无匹配的行
答案 1 :(得分:1)
关注awk
可能对您有所帮助。这将告诉您Input_file2中存在的所有行,而不是Input_file1中的行。
awk 'FNR==NR{a[$0];next} !($0 in a)' Input_file1 Input_file2
答案 2 :(得分:1)
尝试使用diff和sed的组合。
原始差异输出是:
$ diff file1 file2
0a1,2
> /root/new
> /root/new_new
添加sed以除去以“&gt;”开头的所有内容:
$ diff file1 file2 | sed -n -e 's/^> //p'
/root/new
/root/new_new
这保留了订单。请注意,它还假设您只是在第二个文件中添加行。