Linux环境下如何去除CSV字段前导空格且保留字段内部空格
CSV字段前导空格清理解决方案
你之前使用的awk '{$1=$1};1' file默认以空白字符为字段分隔符,会重排整行所有空格,自然无法满足保留字段内部空格的需求。以下是不同场景下的可行方案:
方案1:sed 快速处理(适合无内嵌逗号/引号的简单CSV)
该方案性能极高,处理GB级大文件也不会出现卡顿,仅清理行首前导空格、逗号后的字段前导空格,完全保留字段内部空格:
sed 's/^[[:space:]]*//; s/, *//g' 输入文件.csv > 输出文件.csv
方案2:awk 精准处理(适合无内嵌逗号/引号的简单CSV)
显式指定逗号为字段分隔符,逐字段清理前导空格,逻辑更可控:
awk 'BEGIN{FS=OFS=","} {for(i=1;i<=NF;i++) sub(/^[[:space:]]+/,"",$i)} 1' 输入文件.csv > 输出文件.csv
方案3:兼容带引号/内嵌逗号的复杂CSV
如果你的CSV存在双引号包裹、内部包含逗号的特殊字段,需要用专业CSV解析能力处理,可使用Perl的Text::CSV模块实现:
perl -MText::CSV -e '$csv = Text::CSV->new({binary => 1}); while(my $row = $csv->getline(*STDIN)) { s/^\s+// for @$row; $csv->say(*STDOUT, $row) }' < 输入文件.csv > 输出文件.csv
内容的提问来源于stack exchange,提问作者Biver
相关产品推荐
相关产品推荐

