You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本处理CSV:如何将指定列按行合并生成目标输出?

问题描述

输入文件input_file.csv内容如下:

Fname,Lname,Age,Gender,Address,Age,Gender,Address  
ABC,EFG,33,M,India,Age,Gender,Address  
PQR,XYZ,30,F,Canada,Age,Gender,Address

需求:将第6列和第3列内容按行合并,生成新文件output.csv。

尝试的代码:

final_col_count=8   -- total number of columns
inp_dummy_col_count=6   --- total number of varying columns

for ((i=3;i<=final_col_count;i++))
do
testvar=`expr $i + $inp_dummy_col_count`  
cat input_file.csv | cut -d, -f$testvar >> output.csv  
cat input_file.csv | cut -d, -f$i >> output.csv
done

得到的输出:

Age
Age  
Age
Age
33
30

期望的输出:

Age,Age
Age,33  
Age,30
解决方案

你的原有代码逻辑错误:循环遍历了3到8列,还做了无意义的列数相加,导致每次循环都把整列内容追加到文件,最终把所有第6列内容先堆在一起,再堆第3列内容,完全不符合按行合并的需求。

推荐用awk实现,一行代码就能完成:

awk -F',' '{print $6 "," $3}' input_file.csv > output.csv
  • -F',':指定逗号为列分隔符
  • print $6 "," $3:对每行数据,输出第6列内容+逗号+第3列内容
  • > output.csv:将结果写入新文件,覆盖原有内容(如果需要追加用>>)

如果想用cut配合工具实现,可借助paste按行合并两列:

cut -d',' -f6 input_file.csv | paste -d',' - <(cut -d',' -f3 input_file.csv) > output.csv
  • cut -d',' -f6:提取第6列内容
  • paste -d',' - <(...):将前一个管道的第6列内容,和进程替换生成的第3列内容,按行用逗号合并

内容的提问来源于stack exchange,提问作者ghanshyam radia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 12:14:53