【发布时间】:2020-11-15 18:52:09
【问题描述】:
我有 2 个文件
文件 1
A0001 C001
B0003 C896
A0024 C234
B1542 C231
A0001 C001
A0024 C234
最多 15000 条这样的行。
文件 2
B1542
A0024 C234
A0001
A0024
和 5000 条这样的行。
我想比较文件 2(包括子字符串/字符串)和文件 1(包括字符串)并存储文件 1 中唯一的第一个匹配行,所以最终结果应该是这样的:
B1542 C231
A0024 C234
A0001 C001
A0024 C234
我尝试使用 awk 或 grep,但我什至没有接近最终解决方案
awk 'FNR==NR{a[$1];next}($1 in a){print}' file2 file1
这个 awk 只打印完整的匹配项 - 如果子字符串包含,它会忽略
grep -Ff File2 File1
这个 grep 打印所有匹配项,而不仅仅是第一个匹配项
感谢您的帮助
附:文件 1 可以包含重复的字符串
【问题讨论】:
-
感谢您以代码的形式展示您的努力。您能否在问题中的输入和预期输出样本中更清楚一些。请编辑您的示例,然后让我们知道。
-
假设对于这个示例,只有文件 2 中的 4 个子字符串出现在文件 1 中,因此它会按照文件 2 中出现的顺序打印文件 1 中仅有的 4 个匹配项
-
我想请您用更清晰的示例编辑您的问题,以便更好地理解谢谢。
-
非常感谢您尝试帮助我。如果您有任何不清楚的地方,请提出问题,我会回答,我认为我在这里给出的示例满足了需求。如果有任何不清楚的地方,我很乐意回答
-
考虑到您只想打印找到的第一个匹配项,请尝试
awk 'FNR==NR{a[$1];next}($1 in a){print;delete a[$1]}' file2 file1,如果这对您有帮助,请告诉我?