在本回復的第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}'
你在使用什麼操作系統? Linux呢?請在你的問題中提及它。你也可以舉幾個你的數據文件的例子嗎? – Wossname
使用Windows,但可以輕鬆創建一個Linux實例來執行此操作。單詞之間具有額外空格的列包含(按字段引用)'姓和名','街道地址','城市','字符串句子格式'。某些表/ .csv文件比其他表格有更多的空格。我希望有所幫助。 – pbnyc
消息框自動刪除空格。 – pbnyc