如何使用Linux工具为CSV文件最后一列添加引号?
给CSV最后一列添加引号的Linux工具方案
当然有可行的方案!这里给你几个用Linux常用工具实现的简便方法,都是一行命令就能搞定:
方法1:用awk(推荐,处理列更直观)
awk是处理结构化文本的神器,针对你的需求,可以这样写:
awk -F ', ' 'BEGIN{OFS=", "} {if(NR>1) $NF="\""$NF"\""; print}' your_file.csv
解释:
-F ', ':指定输入的字段分隔符是逗号加空格BEGIN{OFS=", "}:设置输出的字段分隔符和输入一致,保证格式不变if(NR>1) $NF="\""$NF"\"":跳过第一行表头(NR是行号),把最后一列($NF代表最后一个字段)用双引号包裹print:打印处理后的每一行
测试你的输入:
输入:
column1, column2, column3
1, 03-12-2017, some text, with commas
运行命令后输出就是你想要的:
column1, column2, column3
1, 03-12-2017, "some text, with commas"
方法2:用sed(适合正则爱好者)
sed擅长文本替换,用正则匹配最后一列的位置:
sed -E '2,$ s/(.*, )(.*)/\1"\2"/' your_file.csv
解释:
-E:启用扩展正则表达式,让语法更简洁2,$:只处理第二行到最后一行,跳过表头s/(.*, )(.*)/\1"\2"/:把每行分成两部分,第一部分是从开头到最后一个“逗号加空格”,第二部分是剩下的内容(也就是最后一列),然后把第二部分用双引号包起来替换回去
如果你的CSV分隔符是纯逗号(没有空格),只需要调整正则里的分隔符就行:
sed -E '2,$ s/(.*,)(.*)/\1"\2"/' your_file.csv
小提示
如果想直接修改原文件(谨慎操作!建议先备份),可以:
- awk加输出重定向:
awk -F ', ' 'BEGIN{OFS=", "} {if(NR>1) $NF="\""$NF"\""; print}' your_file.csv > temp.csv && mv temp.csv your_file.csv - sed加
-i参数(GNU sed):sed -i -E '2,$ s/(.*, )(.*)/\1"\2"/' your_file.csv
内容的提问来源于stack exchange,提问作者newbie
相关产品推荐
相关产品推荐

