it-swarm.com.de

Hinzufügen von numerischen Werten von zwei Spalten in eine Textdatei

Ich habe zwei Textdateien, deren Inhalt wie folgt ist;

data_1:473428800.0 0 0.000004 1.00 WETZTROPMCIL   #4 columns, several lines
       473429100.0 0 0.000002 1.00 WETZTROPMCIL

data_2:473428800.0 0 2.100000 1.00 DRYTROPMCIL    #4 columns, several lines
       473429100.0 0 2.200000 1.00 DRYTROPMCIL

Ich muss jede Zeile der 3. Spalte einer Datei der jeweiligen Zeile der 3. Spalte in der anderen Datei hinzufügen und diese Summen in einer neuen Datei durch die 3. Spalte von data_1 ersetzen (siehe unten).

merged_data= data_1:473428800.0 0 2.1000004 1.00 WETZTROPMCIL   #4 columns, several lines
                    473429100.0 0 2.2000002 1.00 WETZTROPMCIL
3
deepblue_86

Versuchen:

paste data_1 data_2 | awk '{$3=sprintf("%.10g", $3+$8); NF=5; print}'

Anmerkungen:

  • Ich sehe 5 Felder pro Datei, nicht 4 wie in OP angegeben.

  • paste fügt Zeilen aus den beiden Dateien zusammen.

  • awk sieht Zeilen mit jeweils 10 Feldern. NF=5 Weist es an, nur die ersten 5 zu behalten, die aus data_1 Stammen.

  • Der Float wird im Format [s]printf%.10f Gedruckt. Dies könnte oder könnte nicht in Ordnung sein. Siehe man 3 printf.

  • Wenn eine Sortierung erforderlich ist, kann dies durch eine Prozessersetzung erfolgen:

    paste <(sort [args] data_1) <(sort [args] data_2) | awk ...
    
5
Matei David

Die Methode von Matei sollte sicherstellen, dass die Zeilen in derselben Reihenfolge sind. Daher ist der folgende Weg sicherer.

sort -k 1n data_1 > data_1_sort
sort -k 1n data_2 > data_2_sort
paste data_1_sort data_2_sort| awk '{$3=sprintf("%.10g", $3+$8); NF=5; print}'
2
Shicheng Guo