ID非公開さん
2022/6/23 12:56
2回答
Linux:あるパターンにはさまれた複数行を1行にまとめる方法について
Linux:あるパターンにはさまれた複数行を1行にまとめる方法について <Audit> a b c d </Audit> <Audit> A B C D </Audit> となっている文を <Audit>adcd</Audit> <Audit>ABCD</Audit> と表示したいのですが、どのようにコマンドを記述すれば良いでしょうか。 Linux上で動いているOracleの監査ログを精査したいのですが、 大量にログが吐かれているので、精査したいユーザー名をgrepしたところ、監査ログが複数行に分かれているので、その前後までgrep出来ませんでした。 なので、一旦上記のように、改行を無くしてからgrepしたいのですが、そのやり方がネットを調べても上手く読み取れませんでした。 最終的に<Audit>adcd</Audit>が取り出せれば良いので、 上記の様な形にならなくても大丈夫です。 例えば改行を全部無くして1行にまとめて、そこから<Audit>adcd</Audit>を抜き出していく等。 因みに監査ログは容量が多すぎるので、tarで固めてます。 実行コマンド tar -O -xf tarfile | grep “USERNAME”
Linux系・54閲覧
ベストアンサー
その手のログの加工はUNIXではAWKが得意としています。 あまりスマートじゃありませんが、Awkで書くとこんな感じです。 文法もそんなにむずかしくないので、見て見られてはどうでしょう。 がんばればワンライナーで書けるかも。。。 pi@raspberrypi ~/bin $ cat test21.txt <Audit> a b c d </Audit> <Audit> A B C D </Audit> pi@raspberrypi ~/bin $ awk -f test21_awk.txt <test21.txt <Audit>abcd</Audit> <Audit>ABCD</Audit> pi@raspberrypi ~/bin $ cat test21_awk.txt BEGIN{ } { if ($0 ~ /<\/.*>/){ line = line $0 print line line = "" next } else { sub("\n","",$0) } line = line $0 } END{ }pi@raspberrypi ~/bin $
ID非公開さん
質問者2022/6/27 23:43