bash - 使用 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
这可行,但是它也将不匹配的值作为空白输出返回。在这种情况下,我只需要匹配输出。
将不胜感激任何帮助。谢谢阅读。
解决方案
尝试以下操作:
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”
推荐阅读
- javascript - 如何在 redux-saga 中等待 API 结果
- apache - 如何阻止来自 Apache 2.4.6 的恶意文件上传?应该可配置以添加扩展
- php - 为什么没有从选择查询中获取所有记录?
- python - 我们在 python 中是否有类似 R 中的 ts() 的东西?
- sql - 从 postgres postgres 表上的 select 查询结果集中获取 n 行
- python - 如何粘合lua和python
- python-3.x - 尝试抑制 Tensorflow 2 产生的警告失败
- c# - 将用户上传到 Firebase 实时数据库时出现 NullReferenceException
- javascript - laravel 使用 js 和外部 css 生成视图的 pdf
- node.js - 使用角度 8 输入值后自动将光标移动到下一个输入字段