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

2022-08-10 22:56:56 +08:00
 mantis

如:有如下 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

请问如何实现?

2980 次点击
所在节点    程序员
27 条回复
Yang2635
2022-08-10 23:10:19 +08:00
sort a.txt b.txt | uniq -u
yinyu
2022-08-10 23:10:23 +08:00
两个都要遍历一遍,然后再对方里面 grep ,然后 wc 看看行数,如果等于零就说对方没有,就写到 c 里面,可能大佬们,有更好的办法吧。
Yang2635
2022-08-10 23:10:43 +08:00
comm -13 a.txt b.txt
nuk
2022-08-10 23:10:45 +08:00
可以用 comm ,但是要求输入是已经排序好的
Privileges
2022-08-10 23:11:20 +08:00
grep -wvf a.txt b.txt
id4alex
2022-08-10 23:13:05 +08:00
cat a.txt b.txt | sort | uniq > tmp.txt
grep -vf a.txt tmp.txt > c.txt
grep -vf b.txt tmp.txt >> c.txt
weiiai
2022-08-10 23:13:53 +08:00
diff -a a.txt b.txt | grep ">" | sed 's/> //'
mantis
2022-08-10 23:14:01 +08:00
需要输出到一个新文件,需要完整的 shell 脚本,不是简单的命令,谢谢大家。
id4alex
2022-08-10 23:14:21 +08:00
又从各位老哥这里学习到了 shell 技巧
Yang2635
2022-08-10 23:15:55 +08:00
@mantis 重定向">"一下就行了
wbd31
2022-08-10 23:21:31 +08:00
diff a.txt b.txt | awk '{if($0~/^[<>]/)print substr($0, 3)}'
PMR
2022-08-10 23:24:11 +08:00
这问题前几天有人问过



shell 脚本不就是塞命令进去? 还能编译个二进制不成?
xiadong1994
2022-08-11 01:53:19 +08:00
@PMR #12 把一个二进制 base64 之后用 shell 写入 file system 再运行(

我真的见过这样的……
kkeep
2022-08-11 01:55:05 +08:00
@weiiai 你这个需要 sort
codingBug
2022-08-11 03:19:37 +08:00
善用[搜索引擎]( https://unix.stackexchange.com/questions/428419/how-to-write-the-difference-between-two-files-into-a-file)

不知道是不是你要的效果

`diff a.txt b.txt|grep ">"| cut -c 3- > c.txt`
aaa5838769
2022-08-11 08:00:57 +08:00
上面各个大佬都已经给完整的命令,脚本就是有各种命令组成的,你自己粘贴进去就可以用了。
masker
2022-08-11 09:03:50 +08:00
伸手党的胜利:大佬已经给出了答案,还嫌大佬不够手把手教
qooweds
2022-08-11 09:06:37 +08:00
又到了学习 shell 花式技巧的时间啦,期待更多新命令
knightdf
2022-08-11 09:26:30 +08:00
comm -3 <(sort a.txt) <(sort b.txt)
cwcc
2022-08-11 09:33:30 +08:00
借个楼问下,如果是那种.patch 的文件,怎么应用到文件上呢?还有.patch 文件是怎么来的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/872042

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX