2017-05-27 6 views
-1

Ich muss zwei Spalten einer Datei in wissenschaftliche Notation ändern. Die Datei sieht aus wieprintf, Druckwert in wissenschaftliche Notation

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 

Ich habe Werte in Spalte 5 und 6, um wissenschaftliche Schreibweise zu ändern ich weiß von printf "%1.3e", $5 test.txt oder printf "%1.3e", $6 test.txt. Diese Befehle fügen jedoch Werte aus diesen Spalten in wissenschaftlicher Schreibweise zu Beginn von test.txt hinzu. Wie kann ich Werte der Spalten 5 und 6 zu wissenschaftlichen ändern und halten Sie sie in Spalte 5 und 6. Vielen Dank für Anregungen.

Ergebnis erwarten wie

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 

aussehen würde ich den folgenden Code verwenden, die offensichtlich nicht richtig :) ist

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

das erwartete Ergebnis wäre gut – RomanPerekhrest

+0

@RomanPerekrest, danke, ich habe es hinzugefügt – ThePooh

+0

Schreiben Sie einfach die Ausgabe in eine neue Datei. Lesen Sie die Eingabedatei Zeile für Zeile, für jede andere Spalte als 3/4 kopieren Sie einfach wie in der neuen Datei. Für Spalten 3/4 manipulieren Sie wie benötigt und schreiben Sie das manipulierte Ergebnis in die neue Datei. – SHG

Antwort

1

, die den Trick tun:

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 

Ändern Sie die Leerzeichen/Tabulatoren zwischen den Spalten nach Bedarf.

+0

danke! es funktionierte! – 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 

-i inplace mit GNU awk Fügen Sie die tmp-Datei zu erstellen, wenn diese Angelegenheit Sie explizit zu vermeiden:

$ 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 

Manpage für Details.

Verwandte Themen