如何使用AWK命令打印CSV文件第1、3、9-12及30-35列
命令修改方案
你可以直接按照需求扩展原有awk的输出逻辑即可,以下是两种实现方式:
最简写死版(适合你当前固定需求)
如果你的CSV是逗号分隔的标准格式,先指定字段分隔符为,,如果是空格分隔直接删掉FS=","那一行即可:
grep -i introd *.csv | awk 'BEGIN {FS=","} { # 先输出固定的第1、3列 printf "%s %s ", $1, $3 # 输出9到12列 for(i=9;i<=12;i++) printf "%s ", $i # 输出30到35列 for(i=30;i<=35;i++) printf "%s ", $i # 换行结束当前行输出 print "" }'
如果你需要输出的列分隔符不是空格,把printf里的空格替换成你需要的分隔符(比如逗号,)即可。
灵活配置版(后续改需求不用改循环逻辑)
如果后续可能频繁调整要输出的列区间,可以用区间配置的方式,修改更方便:
grep -i introd *.csv | awk 'BEGIN { FS = "," # 所有要批量输出的列区间写在这里就行 out_ranges["9-12"] = 1 out_ranges["30-35"] = 1 } { printf "%s %s ", $1, $3 for(r in out_ranges) { split(r, rg, "-") for(i=rg[1];i<=rg[2];i++) printf "%s ", $i } print "" }'
特殊场景提示
如果你的CSV字段内部包含逗号(比如带引号包裹的内容"姓名,昵称",年龄),普通awk按分隔符拆分字段会出错,这种情况建议用专门处理CSV的工具csvcut,写法更简单:
grep -i introd *.csv | csvcut -c 1,3,9-12,30-35
内容的提问来源于stack exchange,提问作者himmat
相关产品推荐
相关产品推荐

