Spalte mit Werten hinzufügen, die den Bezeichnern einer anderen Spalte entsprechen

Spalte mit Werten hinzufügen, die den Bezeichnern einer anderen Spalte entsprechen

Ich habe zwei Dateien:

Datei 1

hc          Value
cluster0    0.1  
cluster0    0.2  
cluster0    0.3  
cluster1    0.3  
cluster1    0.5  
cluster0    0.8  
cluster2    0.9  
cluster2    0.9  
cluster0    0.0  

Datei 2

hc       mean
cluster0 0.35
cluster1 0.4   
cluster2 0.9

Und ich möchte eine neue Tabelle wie folgt erstellen:

Datei 3

hc          Value  mean
cluster0    0.1   0.35 
cluster0    0.2   0.35 
cluster0    0.3   0.35 
cluster1    0.3   0.40 
cluster1    0.5   0.40
cluster0    0.8   0.35 
cluster2    0.9   0.90
cluster2    0.9   0.90
cluster0    0.0   0.35

Wie kann ich dies in Bash tun? Gibt es einen Befehl, mit dem dies problemlos möglich ist?

Antwort1

Dies lässt sich ganz einfach in Awk erledigen:

$ awk 'NR==FNR {a[$1] = FNR==1 ? $2 : sprintf("%.2f",$2); next} {print $0,a[$1]}' File2 File1
hc          Value mean
cluster0    0.1   0.35
cluster0    0.2   0.35
cluster0    0.3   0.35
cluster1    0.3   0.40
cluster1    0.5   0.40
cluster0    0.8   0.35
cluster2    0.9   0.90
cluster2    0.9   0.90
cluster0    0.0   0.35

Die Schritte sind:

  • Erstellen Sie für die Zeilen in der ersten benannten Datei ( NR==FNR) ein assoziatives Array (oder Hash), das nach den Werten der ersten Spalte indiziert ist und die Werte der zweiten Spalte (Mittelwert) enthält. Wenn die Mittelwerte nicht im Fließkommaformat angezeigt werden müssen, können Sie diesen Schritt vereinfachen, indem Sie NR==FNR {a[$1] = $2}alle Werte (einschließlich der Kopfzeile) als Zeichenfolgen behandeln.

  • Andernfalls drucken Sie die Zeile, gefolgt vom Wert im Array, dessen Index mit der ersten Spalte übereinstimmt

Antwort2

Habe es mit dem folgenden Skript versucht und es hat auch gut funktioniert

Befehl

for i in `cat file2| awk '{print $1}'`; do p=`grep "$i" file2| awk '{print $2}'`; awk -v i="$i" -v p="$p" '$1 == i {$3=p;print $0}' file1; done|sed '1i hc      Value  mean'

Ausgabe

hc          Value  mean
cluster0    0.1   0.35 
cluster0    0.2   0.35 
cluster0    0.3   0.35 
cluster1    0.3   0.40 
cluster1    0.5   0.40
cluster0    0.8   0.35 
cluster2    0.9   0.90
cluster2    0.9   0.90
cluster0    0.0   0.35

verwandte Informationen