Trim Linux 中 csv 文件字段的前导空格

Trim leading whitespace from fields in csv file in Linux

我只想 trim 看起来像这样的 csv 文件中的前导白色spaces:

thing1,thing2, thing something3,thing4
thing11,thing12, thing something13,thing14
etc.

(注意:我想将 space 保留在 thingsomething3 之间)

所以我的输出是这样的:

thing1,thing2,thing something3,thing4
thing11,thing12,thing something13,thing14

我已经尝试使用 awk '{=};1' file 和我通过快速 google 搜索找到的其他十几个解决方案,但在我的情况下,这些解决方案通常要么冻结,要么什么都不做。

希望有人能帮帮我,干杯!

sed 's/,[[:blank:]]*/,/g' file

示例:

> cat test.txt 
thing1,thing2, thing something3,thing4
thing12,thing12, thing something13,thing14

> cat test.txt  | sed 's/,[[:blank:]]*/,/g'
thing1,thing2,thing something3,thing4
thing12,thing12,thing something13,thing14

有:

cat file
thing1,thing2, thing something3,thing4
thing12,thing12, thing something13,thing14

在 awk 中,您可以处理未引用的 csv 并删除尾随 space,如下所示:

awk 'BEGIN{FS=",[[:space:]]*"; OFS=","}
{=}1' file 

打印:

thing1,thing2,thing something3,thing4
thing11,thing12,thing something13,thing14

假设您引用了 csv,并且您只想更改 csv 分隔符 -- 而不是引用字段中的嵌入式逗号,您应该使用 csv 解析器。

鉴于:

cat file
thing1,thing2, thing something3,"thing4, and 5"
thing11,thing12, thing something13,thing14

命令行中的最简单 csv 解析器是ruby:

ruby -r CSV -e 'CSV.parse($<.read).each{|l| puts l.map(&:lstrip).to_csv}' file

打印:

thing1,thing2,thing something3,"thing4, and 5"
thing11,thing12,thing something13,thing14

还可以用 awk 测试一下:

awk 'gsub(/, */, ",") 1' file
thing1,thing2,thing something3,thing4
thing12,thing12,thing something13,thing14