0

德语版的 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 对评论的定义似乎是

这是第二行

4

5 回答 5

4

如果您的 csv 文件有结构,并且上面 Kevin 的评论是正确的,那么您可以按行号使用范围

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
于 2012-12-13T03:44:02.030 回答
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
于 2012-12-13T03:24:34.147 回答
2

如果你喜欢简单的解决方案,这里是 awk:

$ 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。

于 2012-12-13T14:21:20.067 回答
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
于 2012-12-13T06:25:14.883 回答
0

另一种解决方案:

awk -F\" '{$1=$1; gsub(/0,/,"0."); gsub(/ /,""); if(NR==2) printf "%s ", "#"}1' file
于 2012-12-13T16:39:37.867 回答