awk 출력에 특수 문자 인쇄

awk 출력에 특수 문자 인쇄

RFH2 헤더가 포함된 많은 수의 MQ 메시지가 포함된 대용량 파일이 있습니다. 파일의 각 메시지는 빈 줄로 구분됩니다. 이제 이 큰 파일을 작은 파일로 분할해야 합니다. 각 작은 파일에는 RFH2 헤더가 있는 단일 메시지가 포함되어 있습니다.

다음 awk 명령을 사용해 보았습니다.

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

이것은 쓸모없는 제어 문자 없이 첫 번째 줄을 인쇄합니다. 첫 번째 MQ RFH 헤더 라인의 시작 부분은 RFH ^B^C^X^A^Q^C3MQSTR ^D¸메시지 데이터와 유사합니다. awk 출력은 text 만 인쇄합니다 RFH. 이 명령을 실행한 후 입력 파일에 50개의 메시지가 있으면 text만 포함된 50개의 파일을 얻게 됩니다 RFH. RFH2 헤더와 데이터가 포함된 파일이 50개 있을 것으로 예상됩니다.

민감한 데이터가 포함되어 있으므로 실제 파일 입력을 제공할 수 없습니다. 파일은 다음으로 시작합니다.

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

관련 정보