我在 Linux 上有两个文本文件。其中一个包含有效 ID 列表。例如:
abcd
efgh
ijkl
etc.
另一个包含无效 ID 列表。但是,其中一些也出现在有效 ID 列表中,在此示例中为“efgh”:
mnop
qrst
efgh
etc.
如何轻松构建一个文本文件,其中包含无效列表中未出现在有效列表中的所有行? 也就是说,我希望最终得到一个包含以下内容的文本文件:
mnop
qrst
etc.
我想要一些 Linux 命令行魔法或一些巧妙的 Vim 技巧。提前致谢!
答案1
我认为通信可以帮助您做您想做的事。
它是一个鲜为人知的命令行工具,存在于大多数 Linux 系统中。
答案2
假设您有名为valid
和的文件invalid
,您可以对它们进行排序:
排序有效 > 排序有效;排序无效 > 排序无效
然后比较:
差异 有效排序 无效排序
输出将是(假设您的示例数据):
1d0
< abcd
3c2,3
< ijkl
---
> mnop
> qrst
带有“<”的内容仅存在于第一个文件中,带有“>”的内容仅存在于第二个文件中(无效)。
因此diff valid-sorted invalid-sorted |grep '^>'
应该给你出现在无效但不有效的字符串。
去掉前导 '>' 留给读者作为练习 ;-)
警告:如果您的输入文件实际上在行首包含“>”,则此方法将不起作用。那么您必须采取一些技巧...