我有一个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
我现在正在谷歌上搜索半天,但找不到任何有用的东西。
答案 0 :(得分:1)
试试这个:
awk 'BEGIN{FS=OFS=";"} {gsub(/ /,"",$3); gsub(/ /,"",$4)}1' File
我们将输入和输出字段分隔符设置为;
。然后用3rd
替换4th
和nothing
字段中的空格。希望它有所帮助。
正如其他人已经提到的那样,一次性设置FS和OFS(FS=OFS=";"
)-v
就是为什么它在你的情况下不起作用的原因。我将其移动到BEGIN
块。多数民众赞成。
答案 1 :(得分:1)
问题在于您无法一次性设置FS
和OFS
。将两者分开为
$ 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