Awk kombinieren mehrerer Linien bedingt

Möchte ich kombinieren Sie die Werte aus mehreren Zeilen unterschiedlicher Länge in eine Zeile, wenn Sie die match-IDs.

Eingabe Beispiel:

ID:  Value:
a-1  49
a-2  75
b-1  120
b-2  150
b-3  211
c-1  289
d-1  301
d-2  322

Gewünschte Ausgabe Beispiel:

ID:  Value:
a 49,75
b 120,150,211
c 289
d 301,322

Wie würde ich schreiben, ein awk-Ausdruck (oder sed oder grep oder so), um zu prüfen, ob die IDs angepasst, und dann zu drucken, alle diese Werte auf einer Zeile? Ich kann natürlich nur print
diese in unterschiedlichen Spalten und kombinieren Sie Sie später, so wirklich das problem ist nur bedingt zu drucken, wenn die IDs übereinstimmen und wenn nicht, beginnt eine neue Zeile.

  • Ist die ID: Value: Linie Teil der Eingabe ? Sie haben immer einen -<digit> nach der ID ? Gibt es einen einzigen Raum, oder zwei, in der Eingabe ?
  • Ist es garantiert, dass alle a-Linien gruppiert werden? Ich meine, ist es möglich, ein a-Linie, dann ein b-line und dann noch a-Linie, zum Beispiel?
  • Ich kann diese Gruppe leicht - die eigentlichen Daten ist von der form 6-stellige Nummern, d.h. 000000-1 000005-1 000005-2 000010-1 000010-2 000010-3 ich kann den Kopf ausschalten und neu hinzufügen (was ich sowieso tun, da bin ich remaking Spalten), und die Daten durch Leerzeichen getrennte aber das kann leicht geändert werden, auch als Dank
  • Eine andere Aufklärung - die index-zahlen gehen bis zu zwei Ziffern, aber nicht drei (es ist ein 000065-13 ich denke, das ist die höchste) und die IDs selbst gehen bis auf etwa 500.000 (568025 ist die höchste)
  • Gibt es einen einzigen Raum, oder zwei, in der Eingabe zwischen ID und Wert ?
InformationsquelleAutor Micah Manary | 2011-08-15
Schreibe einen Kommentar