编写一个shell脚本,将2个文件的差集,输出到一个新文件?

如:有如下2个文件:

$ cat a.txt
1111111
2222222
3333333
7777777
9999999
$ cat b.txt
1111111
2222222
3333333
4444444
7777777
5555555
6666666
8888888
9999999

将2个文件的差级输出到文件c.txt

$ cat c.txt
4444444
5555555
6666666
8888888

请问如何实现?

阅读 2k
3 个回答
$ diff --new-line-format="%L" --old-line-format="" --unchanged-line-format="" a.txt b.txt
4444444
5555555
6666666
8888888

结果集已经符合你的期望了,再加个输出重定向就可以写入文件了

前面一位最简单,我来补个傻办法

$ diff a.txt b.txt | grep -E '^(> |< )' | awk '{print substr($0,3)}' > c.txt
$ cat c.txt
4444444
5555555
6666666
8888888

我再来补充一个:
grep -vwf a.txt b.txt >c.txt

注意这种方法需要把文件行数少的放在第一个位置(即a.txt为行数少的那个文件),行数多的放第二个位置,两个文件无需事先排序


另:如果两个文件中的行是经过排序的,还可以使用comm命令

comm -3 a.txt b.txt

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进