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

时间:2015-01-14 08:36:23

标签: bash csv awk

我有一个csv文件,其中的行如下:

  

300001;公司名称; 023-1 2 3 4 5 6 7; 023-3 2 4 6 43   4; email@test.com ;;;;街道名称; 184 ;;邮政编码;城市

我想从第3列和第4列(电话和传真号码)中删除空格,使其看起来像这样:

  

300001;公司名称; 023-1234567; 023-3246434; email@test.com ;;;; Street   姓名; 184 ;;邮政编码;城市

我尝试了在Stackoverflow上找到的这些awk-code(第3列)但没有运气:

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

我现在正在谷歌上搜索半天,但找不到任何有用的东西。

3 个答案:

答案 0 :(得分:1)

试试这个:

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

我们将输入和输出字段分隔符设置为;。然后用3rd替换4thnothing字段中的空格。希望它有所帮助。

正如其他人已经提到的那样,一次性设置FS和OFS(FS=OFS=";"-v就是为什么它在你的情况下不起作用的原因。我将其移动到BEGIN块。多数民众赞成。

答案 1 :(得分:1)

问题在于您无法一次性设置FSOFS。将两者分开为

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

答案 2 :(得分:1)

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

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

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

其他代码看起来没问题,除了你忘记了column4。这一行应该有效:

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