如何解决使用 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
并打印相应的列,说它的第 2 列值。在这种情况下,输出将是 duck
我已尝试使用此命令 awk -F "c\"*,\"*" '{print $2}' /home/linuxmint/Desktop/test/Book2.csv
这有效,但是它也将不匹配的值作为空白输出返回。在这种情况下,我只需要匹配输出。
非常感谢您对此的任何帮助。感谢阅读。
解决方法
尝试以下操作:
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”
,虽然@Raman Sailopal 解决方案有效,但我只想分享更多@jared_mamrot 发布的答案
awk_query=$(awk -F',' '/\ycom.google.android.gm\y/ {print $2}' Book2.csv) && if [ "$awk_query" ]; then awk_query="$awk_query"; else awk_query="N/A"; fi
echo $awk_query
和@tshiono
result=$(grep -wr "com.google.android.gm" Book2.csv | cut -d,-f2 | grep . || echo "N/A")
echo $result
编辑: 当用户可能需要匹配整个单词时,我更新了解决方案。喜欢,
com.google.android.gm Gmail
com.google.android.gms Google Play Services