
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 RFH
enthalten. 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