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

関連情報