如何用awk删除CSV中第二列字符长度小于12的行?
解决CSV文件删除第二列长度不足12的行的问题
你的原awk命令有两个关键问题,导致无法达到预期效果:
- 语法逻辑错误:
$2=length>12是赋值操作而非判断条件,且未指定计算长度的目标字段,正确判断应为length($2) > 12。 - CSV字段分割错误:第二列包含逗号,直接用
-F,分割会把第二列拆成多个片段,导致$2无法获取完整的第二列内容。
正确的解决方法
使用gawk的FPAT特性(专门处理带引号的CSV字段),可以正确识别包含逗号的字段:
gawk 'BEGIN{FPAT = "([^,]+)|(\"[^\"]+\")"} length($2) > 12' your_file.csv > output.csv
如果需要排除引号只计算内容长度(比如"France."的内容长度是7,而非带引号的8),可以用下面的命令:
gawk 'BEGIN{FPAT = "([^,]+)|(\"[^\"]+\")"} { content = $2 gsub(/^"|"$/, "", content) # 去掉首尾的双引号 if (length(content) > 12) print }' your_file.csv > output.csv
效果验证
运行上述命令后,输出文件会保留符合要求的两行:
2343242,"Laboratoire de Virologie, AP-HP, Hôpital Necker-Enfants malades, Paris, France." 234234,"Université de Paris, Institut Cochin, INSERM U1016, CNRS UMR8104, Paris, France."
内容的提问来源于stack exchange,提问作者JohnJ
相关产品推荐
相关产品推荐

