imprimir caracteres especiales en la salida awk

imprimir caracteres especiales en la salida awk

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 RFHcontienen 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

información relacionada