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

标签 linux awk

我想做类似的事情

if ($2 in another file) { print $0 }

假设我有文件 A.txt 其中包含

aa
bb
cc

我有B.txt之类的

00,aa
11,bb
00,dd

我要打印

00,aa
11,bb

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

最佳答案

你可以使用这样的东西:

awk -F, 'NR == FNR { a[$0]; next } $2 in a' A.txt B.txt

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

NR == FNR 是将传递给 awk 的第一个文件作为目标的标准方法,因为 NR(总记录数)仅等于 FNR (当前文件的记录号)为第一个文件。 next 跳到下一条记录,因此在第二个文件之前永远不会到达 a 部分中的 $2。

关于linux - 如何使用 awk 测试列值是否在另一个文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35734197/

相关文章:

linux - 系统更新后 Eclipse CDT 索引器丢失

regex - awk 数据匹配不起作用正则表达式 + 日期函数

linux - 需要 bash 脚本来剥离二进制文件中的版本并与数据库版本进行比较

bash - 使用带分隔符的 AWK 打印特定列

linux - 为什么 mod_revite 在 Apache 中不起作用?

java - tomcat7 100%cpu挂掉,重启tomcat没有效果。直到重新启动系统

python - 基于动态值更新 Matplotlib 中的轴

c - 如何通过 C 库获取 Linux 硬件和系统信息?

linux - 使用 sed 或 awk 或新安装的 Debian 9 中的工具,如何添加未修剪的文本?

linux - 使用 awk(或熟悉的)将多行合并为 1 行