
Tengo un archivo grande que contiene muchos mensajes MQ con encabezado RFH2. Cada mensaje del archivo está separado por una línea en blanco. Ahora necesito dividir este archivo grande en archivos pequeños, cada uno de los cuales contiene un solo mensaje con el encabezado RFH2.
Lo intenté con el siguiente comando awk
awk '{RS=""} {print $0}' inputfile
Esto imprime la primera línea sin los caracteres de control, lo cual no es útil. La primera línea de encabezado de MQ RFH comienza RFH ^B^C^X^A^Q^C3MQSTR ^D¸
seguida de los datos del mensaje. La salida de awk solo imprime el texto RFH
. Si el archivo de entrada tiene 50 mensajes después de ejecutar este comando, obtengo 50 archivos que solo RFH
contienen texto. Espero 50 archivos con encabezado y datos RFH2.
No pude darte la entrada del archivo real porque tiene datos confidenciales. El archivo comienza con
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>
...
Y los archivos de salida deberían tener
RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines
Respuesta1
Aquí tienes. Entrada (archivo de prueba):
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.....
Código:
awk '{print $0 > "file" NR}' RS='\n\n' testfile
Reemplace "archivo" con el nombre de los archivos que desea tener. Con este ejemplo, tendrás:
$ 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.....
Respuesta2
Esto está cerca:
awk '{RS=""} {print $0}' inputfile
Sin embargo, es necesario definir la variable RS.antesawk comienza a leer el archivo. Elija uno de estos:
awk 'BEGIN {RS=""} {print}' inputfile
awk -v RS="" '{print}' inputfile
Para ver los caracteres de control, canalice la salida de awk acat -v
awk -v RS="" 1 inputfile | cat -v