linux - 提取两个文件之间的差异值

标签 linux bash shell awk

<分区>

在 linux/shell 环境中工作,我怎样才能完成以下任务:

文本文件 1 包含:

1
2
3
4
5

文本文件 2 包含:

6
7
1
2
3
4

我需要提取文件 2 中不在文件 1 中的条目。所以在这个例子中是“6”和“7”,现在是它找到它们的地方。 比如文件1中的6、7

我已经在使用这个 awk 命令了

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

但是这个命令只能显示差异,所以,6 和 7 而不是它找到的地方。

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

非常感谢!

最佳答案

使用 awk 你可以这样做:

awk 'FNR==NR { seen[$0]=FILENAME; next }
  {if ($1 in seen) delete seen[$1]; else print $1, FILENAME}
  END { for (i in seen) print i, seen[i] }' file{1,2}
6 file2
7 file2
5 file1

在遍历 file1 时,我们将每行的 column1 存储在数组 seen 中,值为 FILENAME。接下来在迭代 file2 时,我们打印每个缺失的条目,如果找到条目(公共(public)条目)则删除。最后,在 END block 中,我们打印数组 seen 中的所有剩余条目。

关于linux - 提取两个文件之间的差异值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34294356/

相关文章:

linux - 如何将 SSL 应用于每个页面?

php - 从 PHP 脚本调用 Python 脚本时,在控制台运行时创建的临时文件不是通过 PHP 调用创建的

linux - C、不用函数将十六进制数转十进制数

linux - 如何将参数传递给 sh 从 stdin 读取的脚本?

mysql - 连接到 mysql 数据库并执行查询并将结果导出到变量 - bash 脚本

linux - Bash 函数不能返回大数

linux - 如何抑制 mkfs 的警告

bash - 将 bash 变量传递给 awk

windows - Git difftool 不启动外部 DiffMerge 程序

linux - 将 hash-sign-starting-string 参数传递给 shell 脚本