首页 > 解决方案 > 使用 awk 从 csv 文件返回相邻的匹配值

问题描述

我正在尝试从 csv 文件中搜索字符串,如果找到匹配项,则返回相应的 $N 列值,否则返回 N/A。假设我的 csv 文件名为 Book1.csv,内容如下,

a, this, that, those
b, something, many thing, anything
c, duck, goose
d, rock, paper, scissor

我的目标是搜索说c并从中打印相应的列,比如第二列值。在这种情况下,输出将是duck

我试过使用这个命令awk -F "c\"*,\"*" '{print $2}' /home/linuxmint/Desktop/test/Book2.csv

这可行,但是它也将不匹配的值作为空白输出返回。在这种情况下,我只需要匹配输出。

将不胜感激任何帮助。谢谢阅读。

标签: bashawk

解决方案


尝试以下操作:

var=$(awk -F, -v col=3 -v srch="c" '{ for(i=1;i<=NF;i++) { if ($i==srch) { if ( $(col)!="") { print $(col);fnd=1 } } } } END { if (fnd!=1) { print "N/A" } }' /home/linuxmint/Desktop/test/Book2.csv)

将要输出的逗号分隔字段作为变量“col”传递,将要搜索的字符串作为变量“srch”传递。遍历每个逗号分隔的字段并检查它是否与 srch 匹配。如果它确实打印 col 指定的字段并将变量“fnd”设置为 1。在处理行结束时,如果 fnd 不为 1,则打印“N/A”将结果读入变量“var”


推荐阅读