在 linux/shell 环境中工作,我怎样才能完成以下任务:
文本文件 1 包含:
1
2
3
4
5
文本文件 2 包含:
6
7
1
2
3
4
我需要提取文件 2 中不在文件 1 中的条目。因此,在此示例中为“6”和“7”。
如何从命令行执行此操作?
非常感谢!
原文由 mark 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 linux/shell 环境中工作,我怎样才能完成以下任务:
文本文件 1 包含:
1
2
3
4
5
文本文件 2 包含:
6
7
1
2
3
4
我需要提取文件 2 中不在文件 1 中的条目。因此,在此示例中为“6”和“7”。
如何从命令行执行此操作?
非常感谢!
原文由 mark 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用一些鲜为人知的实用程序:
sort file1 > file1.sorted
sort file2 > file2.sorted
comm -1 -3 file1.sorted file2.sorted
This will output duplicates, so if there is 1 3
in file1
, but 2 in file2
, this will still output 1 3
.如果这不是您想要的, sort
的输出通过 uniq
到文件中:
sort file1 | uniq > file1.sorted
sort file2 | uniq > file2.sorted
comm -1 -3 file1.sorted file2.sorted
GNU coreutils 包中有许多实用程序允许进行各种文本操作。
原文由 Daniel Gallagher 发布,翻译遵循 CC BY-SA 2.5 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答800 阅读✓ 已解决
2 回答3.2k 阅读
代码如何工作的解释:
细节说明:
FNR
是当前文件的记录号NR
是所有输入文件的当前总记录数FNR==NR
仅在我们读取 file1 时为真$0
是当前行文本a[$0]
是一个散列,其键设置为当前文本行a[$0]++
我们看到的当前文本行的轨道!($0 in a)
只有当我们没有看到行文本时才为真