![](/img/trans.png)
[英]importing a csv file into mysql from the command line using mysqlimport command
[英]Trim csv file using command line
我有非常大的.csv文件,其中包含原始數據。 許多字段具有前導和尾隨空格,並且許多多字符字段值(假定在字符組/單詞之間只有一個空格)具有多余的空格,例如
'12 Anywhere Street'
應該是:
'12 Anywhere Street'
前導,尾隨和多余的空間從一個額外的空間到六個額外的空間不等。 我可以將文件加載到數據庫中,然后運行腳本來修剪它們。 前導和尾隨的修剪腳本可以很好地運行並且可以快速執行。 但是,用於刪除單詞之間多余空格的腳本要花更長的時間和時間。 最好先使用命令行刪除原始.csv文件中單詞之間的多余空格,然后再將其加載到數據庫中。
我基本上需要運行一個replace函數,將“”的任何實例替換為“”,“”,“”,“ ...”,最多六個空格左右。 我將不勝感激,為實現這一目標提供了一些幫助。
在此響應的第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之類的工具 。 這是jq咒語,假設您需要“標准” CSV文件:
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}'
在MacOS或Linux上,您可以執行以下操作:
cat data.csv | tr -s [:space:] > formatted.csv
這不會修剪每個值,但會刪除所有重復的空格。 也許這會讓你前進。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.