gpt4 book ai didi

mysql - 使用命令行修剪 csv 文件

转载 作者:行者123 更新时间:2023-11-29 21:29:20 25 4
gpt4 key购买 nike

我有非常大的 .csv 文件,其中包含原始数据。许多字段都有前导和尾随空格,并且许多多字字段值应该在字符组/单词之间只有一个空格,但有额外的空格,例如

'12   Anywhere  Street'

应该是:

'12 Anywhere Street'

前导、尾随和额外空格从 1 个额外空格到 6 个额外空格不等。我可以将文件加载到数据库中并运行脚本来修剪它们。前导和尾随修剪脚本运行良好并且执行速度很快;但是,删除单词之间多余空格的脚本要长得多且耗时。在将原始 .csv 文件加载到我的数据库之前,最好使用命令行删除原始 .csv 文件中单词之间的额外空格。

我基本上需要运行一个替换函数,将“”的任何实例替换为“”、“”、“”,......最多六个空格左右。我非常感谢为实现这一目标提供的帮助。

最佳答案

在本回复的第 1 部分中,我首先假设您的 CSV 文件有一个字段分隔符(例如“,”),该分隔符不会出现在任何字段中。在第 2 部分中,我将处理更一般的情况。

第 1 部分。

awk -F, '
function trim(s) {
sub(/^ */,"",s); sub(/ *$/,"",s); gsub(/ */," ",s); return s;
}
BEGIN {OFS=FS}
{for (i=1;i<=NF;i++) { $i=trim($i) }; print }'

第 2 部分。

要处理一般情况,最好使用支持 CSV 的工具(例如 Excel 或 csv2tsv 命令行工具之一)进行转换将 CSV 转换为简单格式,其中值分隔符实际上并不出现在值中。TSV 格式(具有制表符分隔值)特别合适,因为它允许在字段中包含制表符的表示形式。

然后使用 awk -F"\t" 而不是 awk -F, 运行上述 awk 命令。

要恢复原始格式,请使用 Excel、tsv2csv 或 jq 等工具。这是假设您想要一个“标准”CSV 文件的 jq 咒语:

jq -Rr 'split("\t") | @csv'

在紧要关头,以下内容可能就足够了:

awk -F"\t" '
BEGIN{OFS=","; QQ="\"";}
function q(s) { if (index(s,OFS)) { return QQ s QQ }; return s}
function qq(s) { gsub( QQ, QQ QQ, s); return QQ s QQ }
function wrap(s) { if (index(s,QQ)) { return qq(s) } return q(s)}
{ s=wrap($1); for (i=2;i<=NF;i++) {s=s OFS wrap($i)}; print s}'

关于mysql - 使用命令行修剪 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35368125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com