
RFH2 ヘッダーを持つ多数の MQ メッセージを含む大きなファイルがあります。ファイル内の各メッセージは空白行で区切られています。ここで、この大きなファイルを、RFH2 ヘッダーを持つ 1 つのメッセージを含む小さなファイルに分割する必要があります。
以下のawkコマンドを試してみました
awk '{RS=""} {print $0}' inputfile
これは、役に立たない制御文字のない最初の行を出力します。最初の MQ RFH ヘッダー行は のように始まり、RFH ^B^C^X^A^Q^C3MQSTR ^D¸
その後にメッセージ データが続きます。awk 出力はテキストのみを出力しますRFH
。このコマンドを実行した後、入力ファイルに 50 個のメッセージがある場合、テキストのみを含む 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