如何用Bash Shell脚本将管道分隔CSV转为XLSX?
问题原因
你之前的脚本只是重命名了文件扩展名,并没有真正完成格式转换。XLSX是基于XML的二进制压缩格式,并非纯文本结构,Excel会校验文件实际内容,所以直接改后缀会触发格式无效的提示。
正确转换方案
以下两种Shell脚本方案可实现真正的CSV转XLSX:
方案1:使用LibreOffice命令行工具
LibreOffice提供无界面转换功能,适合大多数Linux发行版:
- 先安装LibreOffice Calc组件:
- Debian/Ubuntu系:
sudo apt install libreoffice-calc - CentOS/RHEL系:
sudo dnf install libreoffice-calc
- Debian/Ubuntu系:
- 转换脚本:
参数说明:#!/bin/bash for f in *.csv; do # 针对管道分隔的CSV,指定分隔符ASCII码(|的ASCII是124) libreoffice --headless --convert-to xlsx:"Calc MS Excel 2007 XML" \ --infilter="csv:124,34,0,1" "$f" done--headless:无界面运行,避免弹出窗口--infilter:指定CSV的解析规则,124是管道分隔符的ASCII码,34是双引号,0为文本格式,1表示第一行是表头
方案2:使用Python Pandas库
适合已有Python环境的场景,能精准处理管道分隔的CSV:
- 先安装依赖库:
pip install pandas openpyxl - 转换脚本:
#!/bin/bash for f in *.csv; do python3 -c " import pandas as pd # 读取管道分隔的CSV文件 df = pd.read_csv('$f', sep='|') # 导出为XLSX,不保留索引列 df.to_excel('${f%.csv}.xlsx', index=False, engine='openpyxl') " done
内容的提问来源于stack exchange,提问作者Sherin Shaziya
相关产品推荐
相关产品推荐

