SEd:用单逗号替换空白字符,引号内除外
SEd: replace whitespace characters with single comma except inside quotes
此行来自汽车数据集 (https://archive.ics.uci.edu/ml/datasets/Auto+MPG)
看起来像这样:
15.0 8. 429.0 198.0 4341. 10.0 70. 1. "ford galaxie 500"
如何用单个逗号替换多个白色space(它同时具有 space 和制表符),但不在引号内,最好使用 sed,将数据集转换为一个真正的 csv。谢谢!
用 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
}
这可能适合您 (GNU sed):
sed 's/\("[^"]*"\|[0-9.]*\)\s\s*/,/g' file
这需要一个带引号的字符串或一个十进制数字,后跟白色 space 并用逗号替换白色 space - 贯穿每一行。
不太具体的用途(根据评论):
sed -r 's/("[^"]*"|\S+)\s+/,/g' file
此行来自汽车数据集 (https://archive.ics.uci.edu/ml/datasets/Auto+MPG) 看起来像这样:
15.0 8. 429.0 198.0 4341. 10.0 70. 1. "ford galaxie 500"
如何用单个逗号替换多个白色space(它同时具有 space 和制表符),但不在引号内,最好使用 sed,将数据集转换为一个真正的 csv。谢谢!
用 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
}
这可能适合您 (GNU sed):
sed 's/\("[^"]*"\|[0-9.]*\)\s\s*/,/g' file
这需要一个带引号的字符串或一个十进制数字,后跟白色 space 并用逗号替换白色 space - 贯穿每一行。
不太具体的用途(根据评论):
sed -r 's/("[^"]*"|\S+)\s+/,/g' file