Smarter Removing Unnecessary WhiteSpace CSV
我有一个类似于以下内容的逗号分隔文件(CSV)
1 2 | 1, 2, 3,"Test, Hello" 4, 5, 6,"Well, Hi There!" |
我需要能够将上述内容从Linux命令行理想地转换为
1 2 | 1,2,3,"Test, Hello" 4,5,6,"Well, Hi There!" |
现在,我知道一些其他解决方案,例如:
删除所有逗号后的空格
但是,这并不知道用双引号引起来的字符串。例如,页面上的解决方案:
1 | sed -e 's/\\s\\+,/,/g' |
产生...
1 2 | 1,2,3,"Test,Hello" 4,5,6,"Well,Hi There!" |
不是一样的!此方法删除了包含在字符串中的空格。有谁知道如何删除空格而不破坏双引号中的空格?还是如果那太难了,请改为使用特定字段?
1 | perl -lne 'if(/(.*?")(.*)/){$b=$2;$a=$1;$a=~s/,[\\s]/,/g;print"$a$b"}' your_file |
经过以下测试:
1 2 3 4 5 6 7 8 | > 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):
1 | nawk -F'"' -v OFS='"' '{gsub(/ /,"",$1)}1' your_file |