Unix系统下如何仅搜索CSV文件第二列关键词并保留整行输出
解法1:使用awk(最适配需求,逻辑清晰)
直接通过awk的字段分割能力限定仅匹配第二列,命令如下:
awk -F ',' 'BEGIN{IGNORECASE=1} $2 ~ /cambodia/' your_file.csv
参数说明:
-F ','指定逗号作为字段分隔符,第一列对应$1,第二列对应$2BEGIN{IGNORECASE=1}开启不区分大小写匹配,对应你之前grep -i的效果$2 ~ /cambodia/仅判断第二列是否包含关键词cambodia,匹配成功默认输出整行,自动保留原格式
解法2:使用grep正则限定匹配位置
如果你习惯用grep,可以通过正则限定关键词必须出现在第一个逗号之后,命令如下:
grep -i "^[^,]*,.*\bcambodia\b" your_file.csv
正则说明:
^[^,]*匹配行首到第一个逗号之前的所有内容(即第一列)- 第一个逗号之后的内容才开始匹配
\bcambodia\b,避免命中第一列的内容
补充说明
你之前的命令问题在于:cut提取两列后grep是对整行做匹配,第一列如果出现关键词也会被命中,不符合仅搜索第二列的要求。
以上两种方案都适配你给出的无引号包裹特殊字符的CSV格式,如果你的CSV存在引号包裹的含逗号字段,使用专门的CSV解析工具(比如csvkit)处理即可。
内容的提问来源于stack exchange,提问作者Skipjack
相关产品推荐
相关产品推荐

