从 CSV 文件中的特定列中删除空格

Removing spaces from specific column in CSV file

我有一个包含如下行的 csv 文件:

300001;Company Name;023-1 2 3 4 5 6 7;023-3 2 4 6 43 4;email@test.com;;;;Street Name;184;;Postal Code;City

我想去掉第 3 列和第 4 列(phone 和传真号码)的空格,使其看起来像这样:

300001;Company Name;023-1234567;023-3246434;email@test.com;;;;Street Name;184;;Postal Code;City

我尝试了在 Whosebug 上找到的这些 awk 代码(用于第 3 列),但没有成功:

awk -v FS=OFS=";" '{gsub(/ /,"",)} 1' file.csv > test.csv
awk -F, ' ~ / / { OFS= ";";  = ""; } 1' file.csv > test.csv

我已经用谷歌搜索了半天,但找不到任何有用的东西。

试试这个:

awk 'BEGIN{FS=OFS=";"} {gsub(/ /,"",); gsub(/ /,"",)}1' File

我们将输入和输出字段分隔符设置为;。然后用 nothing 替换 3rd4th 字段中的空格。希望对你有帮助。

正如其他人已经提到的,使用 -v 一次设置 FS 和 OFS (FS=OFS=";") 是它在您的情况下不起作用的原因。我将其移动到 BEGIN 块。就是这样。

问题是您不能一次设置 FSOFS。将两者分开为

$ awk  -vFS=";" -vOFS=";" '{gsub(" ","",); gsub(" ", "", ) }1' input
300001;Company Name;023-1234567;023-3246434;email@test.com;;;;Street Name;184;;Postal Code;City

您的问题原因是 -v FS=OFS=";" 您可以使用:

awk -F';' -v OFS=";" '...'

awk 'BEGIN{FS=OFS=";"} ...'

其他代码看起来没问题,只是你忘记了column4。这条线应该有效:

awk -F';' -v OFS=";" 'gsub(/ /,"",)+gsub(/ /,"",)+7' file