我有一个逗号分隔文件(CSV),类似于以下
1, 2, 3, "Test, Hello"
4, 5, 6, "Well, Hi There!"
我需要能够将上面的Linux命令行理想地转换为
1,2,3,"Test, Hello"
4,5,6,"Well, Hi There!"
现在,我知道其他一些解决方案,例如: Removing spaces after all commas
然而,这并不知道用双引号括起来的字符串。例如,页面上的解决方案:
sed -e 's/\s\+,/,/g'
...可生产
1,2,3,"Test,Hello"
4,5,6,"Well,Hi There!"
这不是同样的!此方法删除了封闭字符串中的空格。有没有人知道如何在不破坏用双引号括起的内容的情况下删除空格?或者,如果这太困难了,而不是特定的领域?
答案 0 :(得分:2)
perl -lne 'if(/(.*?\")(.*)/){$b=$2;$a=$1;$a=~s/,[\s]/,/g;print "$a$b"}' your_file
测试如下:
> cat temp
1, 2, 3, "Test, Hello"
4, 5, 6, "Well, Hi There!"
>
> perl -lne 'if(/(.*?\")(.*)/){$b=$2;$a=$1;$a=~s/,[\s]/,/g;print "$a$b"}' temp
1,2,3,"Test, Hello"
4,5,6,"Well, Hi There!"
>
或者您可以使用awk(因为我正在使用solaris,所以我使用了nawk):
nawk -F'\"' -v OFS='\"' '{gsub(/ /,"",$1)}1' your_file