1

我有一个逗号分隔文件 (CSV),类似于以下内容

1, 2, 3, "Test, Hello"
4, 5, 6, "Well, Hi There!"

我需要能够将上述内容从 Linux 命令行理想地转换为

1,2,3,"Test, Hello"
4,5,6,"Well, Hi There!"

现在,我知道其他一些解决方案,例如: 删除所有逗号后的空格

但是,这不知道用双引号括起来的字符串。例如页面上的解决方案:

sed -e 's/\s\+,/,/g'

生产...

1,2,3,"Test,Hello"
4,5,6,"Well,Hi There!"

不一样!此方法删除了封闭字符串中的空格。有谁知道如何删除空格而不破坏双引号中的空格?或者,如果这太难了,那就换一个特定的领域?

4

1 回答 1

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(我使用 nawk,因为我正在使用 solaris):

nawk -F'\"' -v OFS='\"' '{gsub(/ /,"",$1)}1' your_file
于 2013-06-20T06:31:13.160 回答