德语版的Origin [TM]将.csv文件保存得很奇怪。但是我有很多这些.csv文件,并希望用脚本转换它们。
A,B
Independent variable,comment1
"0,4","0,067"
"0,0","0,08"
"0,07","0,02"
"0,09","0,00"
应该成为
A,B
# Independent variable,comment1
0.4,0.067
0.0,0.08
0.07,0.02
0.09,0.00
Origin的评论定义似乎是
这是第二行
答案 0 :(得分:4)
如果您的csv文件有结构,并且Kevin的上述评论是正确的,那么您可以使用ranges by line number:
sed '2s/^/# /; 3,$s/"\([^,]*\),\([^,]*\)"/\1.\2/g' file
或略短的方式:
sed '2s/^/# /; 3,$s/,/./g;s/"."/,/g;s/"//g' file
结果:
A,B
# Independent variable,comment1
0.4,0.067
0.0,0.08
0.07,0.02
0.09,0.00
答案 1 :(得分:2)
使用sed,假设注释行包含单词comment
:
sed 's/"\([0-9]*\),\([0-9]*\)"/\1.\2/g;/comment/{s/^/#/}' input
假设评论遵循单个大写字母变量名称:
sed 's/"\([0-9]*\),\([0-9]*\)"/\1.\2/g;/^[A-Z],/{n;s/^/#/}' inpu
答案 2 :(得分:2)
如果你喜欢简单的解决方案,请点击这里:
$ cat tst.awk
BEGIN{FS="\",\""; OFS=","}
NR == 2 { $0 = "# " $0 }
NR >= 3 {
for (i=1;i<=NF;i++) {
sub(/\"/,"",$i)
sub(/,/,".",$i)
}
}
{ print }
$ awk -f tst.awk file
A,B
# Independent variable,comment1
0.4,0.067
0.0,0.08
0.07,0.02
0.09,0.00
“NR”是行号,“NF”是当前行上","
- 分隔字段的数量。我想,其余的应该是显而易见的,即使你不懂awk。
答案 3 :(得分:1)
perl -pe 's/\"//g;if($.==2){s/^/#/g;}' your_file
如果您想进行现场更换:
perl -pi -e 's/\"//g;if($.==2){s/^/#/g;}' your_file
AWK:
awk '{gsub(/\"/,"");if(NR==2)$0="#"$0;print}' your_file
答案 4 :(得分:0)
另一种解决方案:
awk -F\" '{$1=$1; gsub(/0,/,"0."); gsub(/ /,""); if(NR==2) printf "%s ", "#"}1' file