2016-08-25 6 views
1

私は大きなログファイルを持っています。そこから、具体的なデータを抽出する必要があります。正確には、繰り返し表示される別個のフィールドの値です。つまり、多くのCDR、などのコールタイプ、発信番号、としてフォーマットgrep出力の列

オリジナルテキストの書式は以下の通りである:

Reason Code:"XXX", Result Code:XXX, Desc: "XXX" 
.. 
A_NUMBER.ADDRESS = XXX 
.. 

は次のようにのように見える必要な行を取得するために私が管理しているegrepの使い方

Reason Code:"XXX", Result Code:XXX, Desc: "XXX" 
RECORD_IDENTIFICATION.FILE_ID: XXX 
A_NUMBER.ADDRESS = XXX 
Call is from XXXX, VDATE=XXXX. 

私は、私は外観が本当に興味がない、表スタイルでそれらをフォーマットすることができるという理由でグループ化され、FILE_ID、A_Numと日付を呼び出して、列見出しとして機能し、

Reason Code | File_ID | A_Number | Date 
    xxxx | xxxx | xxxx | xxxx | 

よう ておりません同じ呼び出しに属するために、要素を連続させたいだけです。

私はawk、sed、printfのいろいろな変種を使いましたが、何も動作していないようです。

私はprintfの

printf "%-205s\n" $(grep -E 'Reason Code|RECORD_IDENTIFICATION.FILE_ID|A_NUMBER.ADDRESS|Call is from' file.err) 

又は

printf "%-65s | %-65s | %-65s | %-65s" $(grep -E 'Reason Code|RECORD_IDENTIFICATION.FILE_ID|A_NUMBER.ADDRESS' file.err | awk 'FS = "\n" {print $1}') 

のパラメータとして総文字値を置くことを試みたが、出力の値はスクランブルと使用できません。

私の意見では、解決策はawkがサポートしていると思われる何らかのループに置かれるかもしれませんが、私はそれを並べ替えることができません。

ご協力いただければ幸いです。

はあなたがsedであなたのgrepコマンドの出力を変換することができますあなたに

+2

あなたの質問を[編集]あなたのサンプル入力の最小例とそれに対応する出力を表示するために質問を編集します。試してみたら、それも見せてください。 –

答えて

0

ありがとう:

sed 'N;N;N;s/Reason Code:"\([^"]*\).*FILE_ID: \([^\n]*\).*A_NUMBER.ADDRESS = \([^\n]*\).*VDATE=\([^.]*\).*/\1 \2 \3 \4/' 

$ echo ''' Reason Code:"XXX", Result Code:XXX, Desc: "XXX" 
RECORD_IDENTIFICATION.FILE_ID: XXX 
A_NUMBER.ADDRESS = XXX 
Call is from XXXX, VDATE=XXXX.''' | sed 'N;N;N;s/Reason Code:"\([^"]*\).*FILE_ID: \([^\n]*\).*A_NUMBER.ADDRESS = \([^\n]*\).*VDATE=\([^.]*\).*/\1 \2 \3 \4/' 
XXX XXX XXX XXXX 

しかし、それはgrepの使用を避けるのが最善だろうともsedをしましょうフィルタリングを行う。フィルタリングされていないデータの形式を投稿していないので、このようなソリューションを提案することはできません。

+0

解決に感謝します。それは私が探していたことを行います、そして、それは付加的なテキストなしで値だけを与えます。しかし私は解決できない問題に直面しています。行1と2の出力は揃えられ、行3と4の結果はそれぞれ下の新しい行に表示されます。これがなぜ起こるのかあなたは考えていますか? – gm08

+0

行1と2は列1と2を意味します。 – Aaron

+0

はい、右: これは、 "Call is from"のそれぞれの値を含めるように少し修正したので、私が使用しているコードの最後のバージョンです: 'code' sed 'N; N; N; s /理由コード:\([^ "] * \)。* RECORD_IDENTIFICATION.FILE_ID:\([^ \ n] * \)。* A_NUMBER.ADDRESS = \([^ \ n] * \)。 \([^、] * \)から。*/\ 1 \ 2 \ 3 \ 4/' – gm08