一尘不染

提取2组/文件之间的唯一值

linux

在linux / shell env中工作,如何完成以下任务:

文本文件1包含:

1
2
3
4
5

文本文件2包含:

6
7
1
2
3
4

我需要提取文件2中不在文件1中的条目。因此,在此示例中为“ 6”和“ 7”。

如何从命令行执行此操作?

非常感谢!


阅读 226

收藏
2020-06-02

共1个答案

一尘不染

$ awk 'FNR==NR {a[$0]++; next} !a[$0]' file1 file2
6
7

该代码的工作方式说明:

  • 如果我们正在处理file1,请跟踪我们看到的每一行文本。
  • 如果我们正在处理file2,但没有看到行文本,则打印它。

详细说明:

  • FNR 是当前文件的记录号
  • NR 是所有输入文件中的当前总记录号
  • FNR==NR 仅在我们读取文件1时为真
  • $0 是当前文本行
  • a[$0] 是一个哈希,其键设置为当前文本行
  • a[$0]++ 跟踪我们已经看到当前文本行
  • !a[$0] 仅当我们没有看到行文本时才为真
  • 如果上述模式返回true,则打印文本行,这是默认的awk行为,未提供任何明确的操作
2020-06-02