2012-03-01 51 views
9

我想编写一个bash脚本或几个shell命令来解决我的问题。我有两个文件,old.txt,new.txt。我想生成一个diff.txt文件,它只包含已更改或新建的行。举例来说,如果我有:比较两个文件并保留新的或更改的行

old.txt:

Sierra 
Tango 
Oscar 
Victor 
Whiskey 
Yankee 

new.txt:

Sierra 
Tango 
Echo 
Osc__ar 
Victor 
Uniform 
Whiskey 
Yan__kee 

我想一个diff.txt,看起来像这样:

Echo 
Osc__ar 
Uniform 
Yan__kee 

对于透视图,我正在编写此脚本以帮助我创建差分Motorolla S2记录,以便通过串行端口将程序加载到embe dded电脑。我知道bash相当好,我只是不知道从哪里开始。

回答

8
$ awk 'FNR==NR{old[$0];next};!($0 in old)' old.txt new.txt 
Echo 
Osc__ar 
Uniform 
Yan__kee 
16
$ grep -v -f old.txt new.txt 
Echo 
Osc__ar 
Uniform 
Yan__kee 
+0

真棒,这工作,但如果两个文件具有空行输出是空的。同样对于我要区分的完整文件,我会得到“grep:无效的后向引用” – portforwardpodcast 2012-03-01 04:05:52

+1

@portforwardpodcast在旧文件中是否有任何可以解释为正则表达式的内容? – chrisaycock 2012-03-01 04:08:27

+0

雅我完全做。大量的斜杠和开始和点等我认为awk是我的方式去:) – portforwardpodcast 2012-03-01 04:12:13

0

这里是如何只有新线,改变使用diff线:

$ cat file.txt file2.txt 
line 1 
line 2 
line 3 
line 4 
line 5 
line 5 
$ cat file2.txt 
line 1 
line 2 
line 3 
line 4b 
line 5 
line 6 

$ diff --changed-group-format='***%>' --unchanged-group-format='' --new-group-format='+++%>' file.txt file2.txt 
***line 4b 
+++line 6 
相关问题