如何使用 awk 测试列值是否在另一个文件中?

Ven*_*tta 5 linux awk

我想做类似的事情

if ($2 in another file) { print $0 }
Run Code Online (Sandbox Code Playgroud)

所以说我有文件 A.txt ,其中包含

aa
bb
cc
Run Code Online (Sandbox Code Playgroud)

我有 B.txt 喜欢

00,aa
11,bb
00,dd
Run Code Online (Sandbox Code Playgroud)

我要打印

00,aa
11,bb
Run Code Online (Sandbox Code Playgroud)

我如何在 awk 中测试它?我不熟悉一次处理两个文件的技巧。

Tom*_*ech 7

你可以使用这样的东西:

awk -F, 'NR == FNR { a[$0]; next } $2 in a' A.txt B.txt
Run Code Online (Sandbox Code Playgroud)

这将保存每一行A.txt作为数组中的键a,然后打印B.txt其第二个字段在数组中的任何行。

NR == FNR是定位传递给 awk 的第一个文件的标准方法,因为NR(总记录数)仅等于FNR(当前文件的记录数)对于第一个文件。next跳到下一条记录,因此$2 in a直到第二个文件才到达该部分。