awk实现字段匹配字符串时递增字段值的输出异常排查
问题原因
你原有脚本存在两个问题导致输出不符合预期:
- 仅在匹配
$1 == "FL"的分支中写了打印逻辑,未匹配的行没有任何输出操作,因此最终结果只保留了匹配行 - 没有指定输出字段分隔符,awk默认输出分隔符为空格,因此匹配行的两个字段被空格拼接,丢失了原有的逗号分隔格式
解决方法
使用以下命令即可实现需求:
awk -i inplace -F',' -v OFS=',' '$1 == "FL" {$2 += 1} {print}' data.txt
参数说明
-F',':指定输入内容的字段分隔符为逗号-v OFS=',':指定输出内容的字段分隔符为逗号,保证输出维持原CSV的逗号格式$1 == "FL" {$2 += 1}:仅当第一个字段值为FL时,将对应行第二个字段的数值加1{print}:对所有行执行打印操作,未匹配修改规则的行会原样输出,匹配规则的行输出修改后的内容
执行后文件内容将和预期完全一致:
NY,1 FL,6 CA,1
注:该方案仅适用于字段内无嵌套逗号、无引号包裹的简单CSV文件,如果是复杂格式CSV建议使用专门的CSV处理工具。
内容的提问来源于stack exchange,提问作者VCP Muthukrishna
相关产品推荐
相关产品推荐

