此行来自汽车数据集(https://archive.ics.uci.edu/ml/datasets/Auto+MPG) 看起来像这样:
15.0 8. 429.0 198.0 4341. 10.0 70. 1. "ford galaxie 500"
如何用一个逗号替换多个空格(它有空格和制表符),但不在引号内,最好使用sed,将数据集转换为REAL csv。谢谢!
答案 0 :(得分:4)
用awk做到这一点:
awk -F'"' 'BEGIN { OFS="\"" } { for(i = 1; i <= NF; i += 2) { gsub(/[ \t]+/, ",", $i); } print }' filename.csv
使用"
作为字段分隔符,每隔一个字段将成为应替换空格的行的一部分。然后:
BEGIN { OFS = FS } # output should also be separated by "
{
for(i = 1; i <= NF; i += 2) { # in every second field
gsub(/[ \t]+/, ",", $i) # replace spaces with commas
}
print # and print the whole shebang
}
答案 1 :(得分:0)
这可能适合你(GNU sed):
sed 's/\("[^"]*"\|[0-9.]*\)\s\s*/\1,/g' file
这会使用带引号的字符串或十进制数后跟空格,并用逗号替换空格 - 在每一行中。
不太具体使用(根据评论):
sed -r 's/("[^"]*"|\S+)\s+/\1,/g' file