【发布时间】:2015-04-03 01:09:35
【问题描述】:
我之前曾问过与此类似的问题,但没有找到我正在寻找的确切答案,对于冗余,我深表歉意。我决定重新发布措辞不同的问题。我有两个冗长的文件,每个文件都有两列,用空格隔开。
我想消除 fileA 和 fileB 中第 2 列匹配的所有行(无论行号/第 1 列如何),并将整个不匹配行输出到单独的文件中。
文件 A:
1 AA
2 BB
3 CC
4 DD
5 EE
6 FF
7 GG
8 HH
文件 B:
1 AA
2 BB
3 XX
4 XX
5 CC
6 DD
7 XX
8 FF
9 GG
10 XX
11 XX
12 HH
期望的输出:
3 XX
4 XX
7 XX
5 EE
10 XX
11 XX
fedorqui 建议我使用 awk 将 fileA 的第二列存储在一个数组中,然后遍历 fileB 以输出符合以下条件的行:
- 第 1 列存在于 fileA 中
-
但 fileB 中的第 2 列不同
awk 'FNR==NR {a[$1]=$2; next} $1 in a && a[$1] != $2' fileA fileB
这很有帮助,直到我的代码在第 2 列中遇到 fileA 和 fileB 之间的第一个差异,然后代码输出以下所有行。
而不是这个,我想逐行比较 fileA 的第 2 列和 fileB 的第 2 列的数组。一旦代码遇到差异,它就会从 fileB 输出整个不匹配的行,然后将数组的同一行与 fileB 的下一行进行比较。它继续比较数组的同一行,输出 fileB 的不同行,直到找到匹配项。如果代码到达 fileB 的末尾并且没有找到匹配项,则从 fileA 输出该行,移动到数组的下一行并继续与 fileB 的每一行进行比较。这是可能的,还是比使用 awk 创建数组更简单的方法?
【问题讨论】: