sort命令不同用法返回结果不一致的疑问(OverTheWire关卡8→9场景)
sort命令不同用法返回结果不一致的疑问(OverTheWire关卡8→9场景)
嗨,我来帮你理清这两个命令的区别,解决你在OverTheWire关卡里遇到的问题~
首先明确你的核心需求:找出data.txt里唯一出现一次的行(也就是下一关的密码),但两个命令的实际功能完全不同,这就是结果不一样的原因:
关于sort -cu data.txt的误区
你可能误以为这个命令是“找出唯一行”,但它的真实作用是检查文件是否已经是「排序完成且无重复行」的状态:
-c选项是「check」,用来验证文件是否按顺序排好;-u选项在这里是配合-c,要求检查的文件同时满足所有行唯一。
一旦命令发现文件不满足“已排序+无重复”的条件,它会立刻输出第一个找到的「违规行」(要么是顺序不对的行,要么是重复出现的行),然后直接停止运行。你看到的那行输出,只是它找到的第一个重复行,完全不是你要找的“唯一出现一次的行”。
为什么sort data.txt | uniq -u能得到正确密码
这个组合才是精准匹配你需求的操作:
- 第一步
sort data.txt:把文件里所有行按顺序排列,这样所有重复的行都会被集中放在一起; - 第二步
uniq -u:uniq的-u选项专门用来过滤掉出现多次的行,只保留恰好出现一次的行——这正是你要找的密码所在行。
如果想验证结果的准确性,你还可以用sort data.txt | uniq -c查看每一行的出现次数,这样就能直观看到哪一行是只出现过一次的啦。
备注:内容来源于stack exchange,提问作者t.p.gonca




