Drucken von Sonderzeichen in der Awk-Ausgabe

Drucken von Sonderzeichen in der Awk-Ausgabe

Ich habe eine große Datei, die viele MQ-Nachrichten mit RFH2-Header enthält. Jede Nachricht in der Datei ist durch eine Leerzeile getrennt. Jetzt muss ich diese große Datei in kleine Dateien aufteilen, von denen jede eine einzelne Nachricht mit RFH2-Header enthält.

Ich habe es mit dem folgenden awk-Befehl versucht

awk '{RS=""} {print $0}' inputfile

Dies druckt die erste Zeile ohne die Steuerzeichen, was nicht sinnvoll ist. Die erste MQ RFH-Headerzeile beginnt wie folgt, RFH ^B^C^X^A^Q^C3MQSTR ^D¸gefolgt von Nachrichtendaten. Die awk-Ausgabe druckt nur den Text RFH. Wenn die Eingabedatei 50 Nachrichten enthält, erhalte ich nach dem Ausführen dieses Befehls 50 Dateien, die nur den Text RFHenthalten. Ich erwarte 50 Dateien mit RFH2-Header und -Daten.

Ich konnte Ihnen die echte Dateieingabe nicht geben, da sie vertrauliche Daten enthält. Die Datei beginnt mit

RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines.....

RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
........some text of many lines.....

RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
...

Und die Ausgabedateien sollten haben

RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines

Antwort1

Bitte schön. Eingabe (Testdatei):

RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....

RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....

RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....

Code:

awk '{print $0 > "file" NR}' RS='\n\n' testfile

Ersetzen Sie "file" durch den Namen der gewünschten Dateien. In diesem Beispiel erhalten Sie:

$ cat file1
RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....

$ cat file2
RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....

$ cat file3
RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....
.........some text of many lines.....

Antwort2

Das ist nah dran:

awk '{RS=""} {print $0}' inputfile

Sie müssen jedoch die RS-Variable definierenVorawk beginnt mit dem Lesen der Datei. Wählen Sie eine der folgenden Optionen:

awk 'BEGIN {RS=""} {print}' inputfile
awk -v RS="" '{print}' inputfile

Um die Steuerzeichen anzuzeigen, leiten Sie die awk-Ausgabe weiter incat -v

awk -v RS="" 1 inputfile | cat -v

verwandte Informationen