2017-05-27 15 views
-1

ファイルの2つの列を科学表記に変更する必要があります。 ファイルは私がprintf "%1.3e", $5 test.txtまたはprintf "%1.3e", $6 test.txtを認識してい科学表記 に列5と6の値を変更する必要がprintf、科学値表記への値の印刷

test.txt 
10177 1 A AC 0.376827 0.0116338 0.0316735 0.713391 0.422784 0.936182 
10352 1 T TA 0.43176 0.00523364 0.0307872 0.865015 0.427932 0.680802 

のように見えます。 しかし、これらのコマンドは、test.txtの先頭の科学表記でこれらの列の値を追加します。 列5と6の値を科学的に変更し、列5と6にそれらを保持する方法はありますかありがとうございます。

私は明らかに:)正しくない、次のコードを、使用しています

test.txt 
10177 1 A AC 3.768e-01 1.163e-02 0.0316735 0.713391 0.422784 0.936182 
10352 1 T TA 4.318e-01 5.234e-03 0.0307872 0.865015 0.427932 0.680802 

ようになり、結果を期待

awk '{printf "%1.3e", $5}' test.txt > test1.txt 
mv -f test1.txt test.txt 
+0

期待された結果は良いでしょう – RomanPerekhrest

+0

@RomanPerekhrest、ありがとう、私はそれを追加しました – ThePooh

+0

出力を新しいファイルに書きます。 3/4以外のすべての列に対して、入力ファイルを行ごとに読み込み、新しいファイルにそのままコピーします。必要に応じて列3/4が操作され、操作された結果が新しいファイルに書き込まれます。 – SHG

答えて

1
トリックを行います

awk '{printf "%d %d %s %s %1.3e %1.3e %f %f %f %f\n", $1, $2, $3, $4, $5, $6, $7, $8, $9, $10}' test.txt > test1.txt 
mv -f test1.txt test.txt 

を必要に応じて列間のスペース/タブを変更します。

+0

ありがとうございました!出来た! – ThePooh

0
$ awk -v OFS=' ' '{for (i=1;i<=NF;i++) printf (i~/^[56]$/?"%1.3e":"%s")"%s", $i, (i<NF?OFS:ORS)}' file 
10177 1 A AC 3.768e-01 1.163e-02 0.0316735 0.713391 0.422784 0.936182 
10352 1 T TA 4.318e-01 5.234e-03 0.0307872 0.865015 0.427932 0.680802 

明示的にそのことならばtmpファイルを作成しないようにGNU AWKで-i inplaceを追加します。

$ cat file 
10177 1 A AC 0.376827 0.0116338 0.0316735 0.713391 0.422784 0.936182 
10352 1 T TA 0.43176 0.00523364 0.0307872 0.865015 0.427932 0.680802 
$ 
$ awk -i inplace -v OFS=' ' '{for (i=1;i<=NF;i++) printf (i~/^[56]$/?"%1.3e":"%s")"%s", $i, (i<NF?OFS:ORS)}' file 
$ 
$ cat file 
10177 1 A AC 3.768e-01 1.163e-02 0.0316735 0.713391 0.422784 0.936182 
10352 1 T TA 4.318e-01 5.234e-03 0.0307872 0.865015 0.427932 0.680802 

詳細はmanページを参照してください。

関連する問題