mantis
V2EX  ›  程序员

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

By mantis at 2022 年 8 月 10 日 · 4354 次点击

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

请问如何实现?

27 条回复  •  2022-08-11 16:40:37 +08:00
Yang2635
   1
Yang2635  
   2022 年 8 月 10 日 via Android   ❤️ 2
sort a.txt b.txt | uniq -u
yinyu
   2
yinyu  
   2022 年 8 月 10 日
两个都要遍历一遍,然后再对方里面 grep ,然后 wc 看看行数,如果等于零就说对方没有,就写到 c 里面,可能大佬们,有更好的办法吧。
Yang2635
   3
Yang2635  
   2022 年 8 月 10 日 via Android
comm -13 a.txt b.txt
nuk
   4
nuk  
   2022 年 8 月 10 日
可以用 comm ,但是要求输入是已经排序好的
Privileges
   5
Privileges  
   2022 年 8 月 10 日
grep -wvf a.txt b.txt
id4alex
   6
id4alex  
   2022 年 8 月 10 日   ❤️ 1
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
   7
weiiai  
   2022 年 8 月 10 日   ❤️ 1
diff -a a.txt b.txt | grep ">" | sed 's/> //'
mantis
   8
mantis  
OP
   2022 年 8 月 10 日
需要输出到一个新文件,需要完整的 shell 脚本,不是简单的命令,谢谢大家。
id4alex
   9
id4alex  
   2022 年 8 月 10 日
又从各位老哥这里学习到了 shell 技巧
Yang2635
   10
Yang2635  
   2022 年 8 月 10 日 via Android
@mantis 重定向">"一下就行了
wbd31
   11
wbd31  
   2022 年 8 月 10 日
diff a.txt b.txt | awk '{if($0~/^[<>]/)print substr($0, 3)}'
PMR
   12
PMR  
   2022 年 8 月 10 日 via Android
这问题前几天有人问过


另
shell 脚本不就是塞命令进去? 还能编译个二进制不成?
trn4
   13
trn4  
   2022 年 8 月 11 日
@PMR #12 把一个二进制 base64 之后用 shell 写入 file system 再运行(

我真的见过这样的……
kkeep
   14
kkeep  
   2022 年 8 月 11 日 via Android
@weiiai 你这个需要 sort
codingBug
   15
codingBug  
   2022 年 8 月 11 日
善用[搜索引擎]( 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`
MilkShake
   16
MilkShake  
   2022 年 8 月 11 日
上面各个大佬都已经给完整的命令,脚本就是有各种命令组成的,你自己粘贴进去就可以用了。
masker
   17
masker  
   2022 年 8 月 11 日 via Android   ❤️ 13
伸手党的胜利:大佬已经给出了答案,还嫌大佬不够手把手教
qooweds
   18
qooweds  
   2022 年 8 月 11 日
又到了学习 shell 花式技巧的时间啦,期待更多新命令
knightdf
   19
knightdf  
   2022 年 8 月 11 日
comm -3 <(sort a.txt) <(sort b.txt)
cwcc
   20
cwcc  
   2022 年 8 月 11 日
借个楼问下,如果是那种.patch 的文件,怎么应用到文件上呢?还有.patch 文件是怎么来的
itechify
   21
itechify  
   2022 年 8 月 11 日 via Android   ❤️ 3
请善用搜索引擎,端饭人前还嚷嚷要喂吗?
ruanimal
   22
ruanimal  
   2022 年 8 月 11 日
@cwcc patch some.file xxx.patch
yolee599
   23
yolee599  
   2022 年 8 月 11 日
@cwcc #20 善用搜索系统,.patch 文件可以通过 git 生成和应用
try4times
   24
try4times  
   2022 年 8 月 11 日
某公司在赛码上的笔试题?
bmsac0001
   25
bmsac0001  
   2022 年 8 月 11 日 via Android
为什么不用 diff
maxbon
   26
maxbon  
   2022 年 8 月 11 日
先排序再用 diff 呀
Acoolda
   27
Acoolda  
   2022 年 8 月 11 日
我推荐大家每日一问,大佬收获指导众生的满足感,我们收获知识。两全其美.
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 62ms · 3.9.8.5