Ich hatte ein bisschen Probleme beim Versuch, einen Befehl zu schreiben, der 2 Zeilen in einer Textdatei zusammenführen und dann eine neue Zeile mit einem Trennzeichen eingeben kann. Ich habe dies gründlich recherchiert und das einzige, was ich finden konnte, war das Zusammenführen Fügen Sie dann in jeder zweiten Zeile ein Trennzeichen hinzu. Dies ist nicht das, was ich brauche, da ich bereits ein Trennzeichen in der Datei habe, das alle 2 Zeilen trennt, die ich zusammenführen muss. Die Datei enthält derzeit Folgendes (um diese Ergebnisse zu erhalten, verwende ich den Befehl oben):

grep -C 2 "some text" somefile.log | grep -A1 "somepattern" | cut -d ' ' -f -1,2,3,4 | cut -c 1-19,118,150-163,130-132 ^C

Dies ist die Datei:

2015-12-29 08:55:43 sg-somepattern
2015-12-29 08:55:43 N22
--
2015-12-29 08:56:59 sg-somepattern
2015-12-29 08:56:59 N22
--
2015-12-29 08:58:07 sg-somepattern
2015-12-29 08:58:07 N22
--
2015-12-29 09:19:32 sg-somepattern
2015-12-29 09:19:32 N22
--
2015-12-29 22:05:57 sg-somepattern
2015-12-29 22:05:57 N22

Jetzt sollten die Ergebnisse, die ich brauche, so aussehen:

2015-12-29 08:58:07 sg-somepattern 2015-12-29 08:58:07 N22
2015-12-29 09:19:32 sg-somepattern 2015-12-29 09:19:32 N22
2015-12-29 22:05:57 sg-somepattern 2015-12-29 22:05:57 N22

Die Verwendung von sed 'N;s/\n/ /' hat nicht funktioniert und nur jede zweite Zeile zusammengefügt, wobei die Zeilen auch mit den Trennzeichen gemischt wurden.

Gibt es eine Möglichkeit, dies mit einem eingebauten Befehl zu erreichen? Ich bin nicht mit awk vertraut, daher würde ich mich bemühen, dies selbst zu schreiben. Jede Hilfe wäre dankbar.

1
apexlol 30 Dez. 2015 im 14:12

2 Antworten

Beste Antwort

Ich würde awk dafür verwenden:

$ awk -v RS="--" -F"\n" 'NF>=3{print $(NF-2), $(NF-1)}' file
2015-12-29 08:55:43 sg-somepattern 2015-12-29 08:55:43 N22
2015-12-29 08:56:59 sg-somepattern 2015-12-29 08:56:59 N22
2015-12-29 08:58:07 sg-somepattern 2015-12-29 08:58:07 N22
2015-12-29 09:19:32 sg-somepattern 2015-12-29 09:19:32 N22
2015-12-29 22:05:57 sg-somepattern 2015-12-29 22:05:57 N22

Dadurch wird das Trennzeichen -- auf das Datensatztrennzeichen gesetzt. Auf diese Weise ist jeder Datensatz ein Block. Dann geht es darum, die gewünschten Zeilen zu drucken.

1
fedorqui 'SO stop harming' 30 Dez. 2015 im 11:18

Dies könnte für Sie funktionieren (GNU sed):

sed '/^--/d;N;s/\n/ /' file

Löschen Sie die Trennzeichen und verbinden Sie jedes verbleibende Zeilenpaar.

0
potong 30 Dez. 2015 im 16:04