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

Bash合并csv/tsv/固定宽度txt生成目标csv时异常换行问题求助

问题根因

你遇到的最后两列单独换行的问题,本质是原始文件的行尾格式为Windows的\r\n(回车+换行),而Linux/Unix下的文本处理工具默认仅将\n识别为行结束符,残留的\r字符会导致paste命令拼接时出现逻辑换行异常,仅最后一行因为没有多余的结束符符合预期。

解决方案

第一步:统一转换所有原始文件为Unix行尾格式

你可以二选一执行:

  • 方案1:用dos2unix工具(推荐)
# 先安装工具,Debian/Ubuntu执行apt install dos2unix;CentOS/RHEL执行yum install dos2unix
dos2unix vehicle-data.csv tollplaza-data.tsv payment-data.txt
  • 方案2:无dos2unix时用tr命令直接删除回车符
tr -d '\r' < vehicle-data.csv > tmp && mv tmp vehicle-data.csv
tr -d '\r' < tollplaza-data.tsv > tmp && mv tmp tollplaza-data.tsv
tr -d '\r' < payment-data.txt > tmp && mv tmp payment-data.txt

第二步:修正数据提取&拼接逻辑

原代码中固定宽度文件按字符位置截取的写法兼容性较差,调整为按字段提取更稳定,完整执行代码如下:

# 提取vehicle-data.csv前4列
cut -d"," -f1-4 vehicle-data.csv > csv_data.csv

# 提取tollplaza-data.tsv第5-7列
tr "\t" "," < tollplaza-data.tsv | cut -d',' -f5-7  > tsv_data.csv

# 提取payment-data.txt最后两列,先将连续空格转换为单个分隔符再取字段
awk '{$1=$1; print $(NF-1), $NF}' payment-data.txt | tr ' ' ',' > fixed_width_data.csv

# 拼接生成最终文件
paste -d',' csv_data.csv tsv_data.csv fixed_width_data.csv > consolidate_data.csv

执行完成后生成的consolidate_data.csv就会完全符合预期格式。


内容的提问来源于stack exchange,提问作者Hassan RHANIMI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:54:01