命令行提取含引号/逗号的CSV前两字段并保留原格式
提取CSV前两个字段(保留原格式)的命令行解决方案
普通的awk -F,命令无法处理CSV字段内的逗号、转义双引号,会导致字段分割错误。以下是两种可靠的解决方案:
方案一:使用专门的CSV工具 csvcut
csvcut 是 csvkit 工具集的一部分,原生支持CSV语法规则,能完美保留原字段格式(包括引号、空字段、字段内的逗号和转义引号):
- 先安装csvkit(以pip为例):
pip install csvkit
- 提取前两个字段:
csvcut -c 1,2 input.csv > output.csv
方案二:使用GNU awk(gawk)的FPAT特性
GNU awk的FPAT参数可以自定义字段匹配规则,精准识别CSV的字段格式:
gawk 'BEGIN{FPAT="([^,]+)|(\"([^\"]|\"\")*\")"}{print $1 (NF>=2 ? ","$2 : "")}' input.csv > output.csv
- 该规则会匹配两种字段:不含逗号的普通字段,或被双引号包裹的字段(支持字段内的逗号和双写转义引号)
- 当只有1个字段时,避免输出多余的逗号
内容的提问来源于stack exchange,提问作者Uri
相关产品推荐
相关产品推荐

