
Eu tenho um arquivo grande que contém muitas mensagens MQ com cabeçalho RFH2. Cada mensagem no arquivo é separada por uma linha em branco. Agora preciso dividir esse arquivo grande em arquivos pequenos, cada um contendo uma única mensagem com cabeçalho RFH2.
Eu tentei com o comando awk abaixo
awk '{RS=""} {print $0}' inputfile
Isto imprime a primeira linha sem os caracteres de controle, o que não é útil. A primeira linha do cabeçalho do MQ RFH começa RFH ^B^C^X^A^Q^C3MQSTR ^D¸
seguida pelos dados da mensagem. A saída do awk imprime apenas o texto RFH
. Se o arquivo de entrada tiver 50 mensagens depois de executar este comando, recebo 50 arquivos contendo apenas o texto RFH
. Estou esperando 50 arquivos com cabeçalho e dados RFH2.
Não pude fornecer a entrada real do arquivo porque ele contém dados confidenciais. O arquivo começa com
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>
...
E os arquivos de saída devem ter
RFH ^B^C^X^A^Q^C3MQSTR ^D¸X<jms>
.........some text of many lines
Responder1
Aqui você vai. Entrada (arquivo de teste):
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
Substitua “arquivo” pelo nome dos arquivos que você deseja ter. Com este exemplo, você terá:
$ 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.....
Responder2
Isso está perto:
awk '{RS=""} {print $0}' inputfile
No entanto, você precisa definir a variável RSantesawk começa a ler o arquivo. Escolha um destes:
awk 'BEGIN {RS=""} {print}' inputfile
awk -v RS="" '{print}' inputfile
Para visualizar os caracteres de controle, canalize a saída do awk paracat -v
awk -v RS="" 1 inputfile | cat -v