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 ファイルに構造があり、上記のケビンのコメントが正しい場合は、行番号で範囲を使用できます。

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 に答える