如何在Linux终端通过命令将CSV文件转换为CSV UTF-8(逗号分隔)格式?
查看文件类型
- 执行文件类型检测命令:
file status.csv
输出会直接展示文件的编码格式、行结束符等属性,示例输出如下:status.csv: CSV text, ISO-8859 text, with CRLF line terminators
- 如果需要确认当前分隔符类型,可查看文件前3行内容:
head -n 3 status.csv,直接识别原文件用的是逗号、分号还是制表符作为分隔符。 - 如需精准检测文件编码,可使用chardet工具:
- 先安装对应包:Debian/Ubuntu系执行
sudo apt install chardet,CentOS/RHEL系执行sudo dnf install python3-chardet - 检测编码:
chardet status.csv,输出会直接给出原文件的编码类型。
- 先安装对应包:Debian/Ubuntu系执行
转换为CSV UTF-8(逗号分隔)格式
场景1:原文件已经是逗号分隔,仅需转编码为UTF-8
- 用iconv命令直接转编码,把
[原编码]替换为上一步检测到的编码即可:iconv -f [原编码] -t utf-8 status.csv > status_utf8.csv
例如原编码为GBK时,命令为iconv -f gbk -t utf-8 status.csv > status_utf8.csv
场景2:原文件分隔符不是逗号,需同时转换编码和分隔符
可组合iconv和awk命令一步完成转换,把
[原编码]、[原分隔符]替换为对应值即可:iconv -f [原编码] -t utf-8 status.csv | awk 'BEGIN{FS="[原分隔符]";OFS=","} {$1=$1; print $0}' > status_utf8_comma.csv
例如原文件是GBK编码、分号分隔时,命令为iconv -f gbk -t utf-8 status.csv | awk 'BEGIN{FS=";";OFS=","} {$1=$1; print $0}' > status_utf8_comma.csv
若原分隔符是制表符,把FS值替换为\t即可。注意:转换完成后可以执行
file status_utf8.csv和head -n 3 status_utf8.csv验证编码、分隔符是否符合要求。注意:如果原文件是Excel导出的带BOM的UTF-8 CSV,需要去掉BOM的话可执行命令:
iconv -f utf-8 -t utf-8//IGNORE status.csv > status_utf8_nobom.csv
内容的提问来源于stack exchange,提问作者Raphael Lima
相关产品推荐
相关产品推荐

