我有一个csv文件,其中包含900行,列的范围从8到400。sed有一种方法可以将其转换为
var1, var2, var3, var4
var1, var2, var3, var4, var5, var6, var7, var8
var1, var2, var3, var4, var5
到
var1, var2, var3 \t "var4"
var1, var2, var3 \t "var4" "var5" "var6" "var7" "var8"
var1, var2, var3 \t "var4" "var5"
前三个变量/列用逗号分隔。然后,使用制表符将它们与其余的列/变量(由“和”隔开)分隔。
我发现了如何在第三列周围添加引号,但是我不确定如何为所有行从第三列到其余各列(数字有所不同)。
sed -E 's/^(([^,]+,){2})([^,]+)/\1"\3"/
以及如何用另一个(\ t)替换第三个定界符(,):
sed 's/,/\t/3' tmp.csv
但是我不确定如何将分隔符从第4个位置更改为空格并向前移动其余列。
我希望其中一些经验丰富的sed用户能够为我提供帮助。
谢谢!
干杯,比吉特
答案 0 :(得分:0)
awk擅长处理基于列的数据。
使用awk的一种方法:
awk -F', ' -v q='"' '{
for(i=1;i<=NF;i++){
if(i==3){$i=$i"\t";continue}
$i=i<3?($i","):(q $i q)
}}7' file.csv
答案 1 :(得分:0)
这可能对您有用(GNU sed):
sed 's/,/\t/3;s/,//3g;s/\S\+/"&"/4g' file
将第三个,
替换为一个标签。从第三个开始删除全局`,'。同样,从第四个字段开始用双引号引起来。