Diff从第二个文件获取更改的行

时间:2018-03-29 14:00:46

标签: bash shell unix diff

我有两个文件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

我查看了手册页,但没有关于此

的任何信息

3 个答案:

答案 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

这保留了订单。请注意,它还假设您只是在第二个文件中添加行。