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, eina
-Linie, dann einb
-line und dann nocha
-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 ?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In awk, wenn Ihre IDs-Cluster zusammen:
Gegeben, Ihre Eingabe:
produziert
Einer Sprache, die das unterstützt "hash-of-Listen" wäre auch praktisch. Hier ist eine Perl-version
In der sed, vorausgesetzt, die IDs sind zusammengefasst:
Balg ist eine kommentierte sed-Skript-Datei, die ausgeführt werden können, mit
sed -n -f script your_input_file
:#!/usr/bin/sed -nf
Sie können es mitscript < your_input_file
.awk
ist besser geeignet für die Aufgabe, aber +1 für die nicht nur zeigen, dass es kann gemacht werden mitsed
, sondern auch zu erklären.Gegeben, Ihre Eingaben in input.txt Datei:
AUSGABE
Einer Lösung basierend auf standard-Werkzeugen als alternative zu den ausgezeichneten Lösungen über...
Verwenden eine leicht modifizierte Eingabe, ohne header und index-erstellt mit