如何在保留表头的前提下移除CSV文件第三列内容?
解决竖线分隔CSV文件移除数据行第三列的问题
我们需要处理以竖线|为分隔符的CSV文件,要求保留表头col1|col2|col3|col4,移除所有数据行的第三列内容,生成目标格式的output.csv。
输入示例(input.csv)
col1|col2|col3|col4 aaa1|aaa2|aaa|aaa3|aaa4 bbb1|bbb2|bbb|bbb3|bbb4 ccc1|ccc2|ccc|ccc3|ccc4
期望输出(output.csv)
col1|col2|col3|col4 aaa1|aaa2|aaa3|aaa4 bbb1|bbb2|bbb3|bbb4 ccc1|ccc2|ccc3|ccc4
原命令失效原因
你之前的awk命令没起作用,问题出在两点:
- 分隔符设置错误:你用了制表符
\t作为分隔符,但实际文件是用竖线|分隔的 - 操作列错误:你清空了第一列,而需求是移除第三列
正确解决方案
这里提供两种可行的awk命令:
方案一:清空第三列后清理多余分隔符
awk 'BEGIN{FS="|";OFS="|"} NR==1{print;next} {$3=""; sub(/\|+/, "|", $0); print}' input.csv > output.csv
- 先设置输入输出分隔符为
| - 表头行直接打印,然后跳过后续处理
- 数据行清空第三列后,用
sub把连续的竖线替换成单个,避免出现aaa1|aaa2||aaa3|aaa4这种格式错误
方案二:直接拼接需要的列
awk 'BEGIN{FS="|";OFS="|"} NR==1{print} NR>1{print $1,$2,$4,$5}' input.csv > output.csv
- 同样先设置好分隔符
- 表头直接打印
- 数据行直接输出第1、2、4、5列,awk会自动用OFS(竖线)拼接,不会产生多余分隔符,更简洁直观
内容的提问来源于stack exchange,提问作者IamGroot
相关产品推荐
相关产品推荐

