печать специальных символов в выводе awk

печать специальных символов в выводе awk

У меня есть большой файл, содержащий множество сообщений MQ с заголовком RFH2. Каждое сообщение в файле отделено пустой строкой. Теперь мне нужно разделить этот большой файл на маленькие файлы, каждый из которых содержит одно сообщение с заголовком RFH2.

Я попробовал следующую команду awk

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

Это печатает первую строку без управляющих символов, что бесполезно. Первая строка заголовка MQ RFH начинается как , RFH ^B^C^X^A^Q^C3MQSTR ^D¸за которой следуют данные сообщения. Вывод awk печатает только текст RFH. Если входной файл содержит 50 сообщений, после запуска этой команды я получаю 50 файлов, содержащих только текст RFH. Я ожидаю 50 файлов с заголовком RFH2 и данными.

Я не могу дать вам настоящий файл input, потому что он содержит конфиденциальные данные. Файл начинается с

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

И выходные файлы должны иметь

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

решение1

Вот, пожалуйста. Входные данные (тестовый файл):

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

Код:

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

Замените "file" на имя файлов, которые вы хотите иметь. В этом примере у вас будет:

$ 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.....

решение2

Это близко:

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

Однако вам необходимо определить переменную RS.доawk начинает читать файл. Выберите один из следующих вариантов:

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

Чтобы просмотреть управляющие символы, направьте вывод awk вcat -v

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

Связанный контент