cat bash 命令将制表符转换为逗号分隔并用双引号引起来
cat bash command to convert tab to comma delimited and wrap in double quotes
我有以下数据(作为例子)
name street suburb
Todd Man 14 Streety Road Townsville
Cheryl Lady 15 Roady Street Villatown
Girl, Sara 16 Circus Circuit Groundston
并使用此命令从制表符分隔转换为逗号分隔的 csv
cat customers.csv | tr '[\t]' '[,]' > customers_comma.csv
然后输出
name,street,suburb
Todd Man,14 Streety Road,Townsville
Cheryl Lady,15 Roady Street,Villatown
Girl, Sara,16 Circus Circuit,Groundston
但是 Girl, Sara
正在添加一个额外的列。我怎样才能使输出为
name,street,suburb
Todd Man,14 Streety Road,Townsville
Cheryl Lady,15 Roady Street,Villatown
"Girl, Sara",16 Circus Circuit,Groundston
看起来很简单,但是用谷歌搜索了这个问题却找不到解决方案。
我不必使用 cat
但如果有一行 bash 命令就可以做到这一点。
您可以试试下面的 sed 命令。
$ sed 's/\([^[:space:],]\+, *[^[:space:]]\+\)/""/g;s/\t/,/g' file
name,street,suburb
Todd Man,14 Streety Road,Townsville
Cheryl Lady,15 Roady Street,Villatown
"Girl, Sara",16 Circus Circuit,Groundston
其中 [^[:space:],]\+
匹配任何字符,但不匹配 space 或逗号一次或多次。
这里有一个 awk 的小解决方案:
awk 'BEGIN{FS="\t";OFS=",";Q="\""}
{for (i=1;i<=NF;++i)
if ($i ~ /[",]/)
$i = Q gensub(/"/,Q Q,"g",$i) Q
}
{ = }
1' file.txt
如果在字段中找到引号,它也会加倍引号。
我有以下数据(作为例子)
name street suburb
Todd Man 14 Streety Road Townsville
Cheryl Lady 15 Roady Street Villatown
Girl, Sara 16 Circus Circuit Groundston
并使用此命令从制表符分隔转换为逗号分隔的 csv
cat customers.csv | tr '[\t]' '[,]' > customers_comma.csv
然后输出
name,street,suburb
Todd Man,14 Streety Road,Townsville
Cheryl Lady,15 Roady Street,Villatown
Girl, Sara,16 Circus Circuit,Groundston
但是 Girl, Sara
正在添加一个额外的列。我怎样才能使输出为
name,street,suburb
Todd Man,14 Streety Road,Townsville
Cheryl Lady,15 Roady Street,Villatown
"Girl, Sara",16 Circus Circuit,Groundston
看起来很简单,但是用谷歌搜索了这个问题却找不到解决方案。
我不必使用 cat
但如果有一行 bash 命令就可以做到这一点。
您可以试试下面的 sed 命令。
$ sed 's/\([^[:space:],]\+, *[^[:space:]]\+\)/""/g;s/\t/,/g' file
name,street,suburb
Todd Man,14 Streety Road,Townsville
Cheryl Lady,15 Roady Street,Villatown
"Girl, Sara",16 Circus Circuit,Groundston
其中 [^[:space:],]\+
匹配任何字符,但不匹配 space 或逗号一次或多次。
这里有一个 awk 的小解决方案:
awk 'BEGIN{FS="\t";OFS=",";Q="\""}
{for (i=1;i<=NF;++i)
if ($i ~ /[",]/)
$i = Q gensub(/"/,Q Q,"g",$i) Q
}
{ = }
1' file.txt
如果在字段中找到引号,它也会加倍引号。