2016-09-07 6 views
0

ログファイル内の2つのパターンを一致させる必要があり、可能であれば出力をテーブルとして取得する必要があります。ログファイルの2つのパターンと一致し、テーブルとして出力

Seed for random set to: uuzTjCqMVRk= 
    --out /home/ALL/ADRL.GLND.FET-EnhA 
    --max-shift False 
    --min-shift False 

p-value = 0.542 

Seed for random set to: P2+shGCxj70= 
    --out /home/ALL/BLD.CD14.MONO-EnhA 
    --max-shift False 
    --min-shift False 

p-value = 0.737 

私はこの(テキストファイルとしてエクスポートするには、タブ区切り)のような出力を取得したいと思います::

ログファイルは、私が一致させたい言葉を複数の行を持って、ここでは、ログファイルの例です。
Group Pvalue 
ADRL.GLND.FET-EnhA 0.542 
BLD.CD14.MONO-EnhA 0.737 
ことが可能であるならば、私はbashでそれをしたいと思っ

EDIT:

これは私がしようとしたものです:

grep 'out' file.log | awk '{print $0}' > file1.txt 
grep 'p-value' file.log | awk '{print $0}' > file2.txt 
paste -d"\t" file1.txt file2.txt > pval.txt 
+2

はあなたがしようとしているものを貼り付けることはできますか? –

答えて

1

ゼロエラーチェック:

awk '/--out/ { sub(".*/","",$2);printf "%s\t",$2; } /p-value =/{ print $3; }' < file.log 

ラインが--outを持っている場合は、タブに続くパスのベース名を出力します。行にp-value =がある場合は、その番号と改行を出力します。

awkこの場合、一致する行を修正できるので、いいです。 grepで考えると、必要な部品を手に入れるために追加のツール(sedなど)を配備してから、それらを便利な形に再アセンブルする必要があります。 greppasteの使用は魅力的であり、より多くのプロセスと導入されたツールを犠牲にして、調整が機能します。

awkパターンマッチングの大きなブロックでこれを行うことができますが、これはもっと弾丸になります。私は読者のための練習として残します。

2
$ awk -F'[/ ]' -v OFS='\t' 'BEGIN{print "Group","Pvalue"} (NR%7)==2{g=$NF} (NR%7)==6{print g, $NF}' file 
Group Pvalue 
ADRL.GLND.FET-EnhA  0.542 
BLD.CD14.MONO-EnhA  0.737 

またはあなたが好む場合:

$ awk -F'[/ ]+' -v OFS='\t' 'BEGIN{print "Group","Pvalue"} $2=="--out"{g=$NF} $1=="p-value"{print g, $NF}' file 
Group Pvalue 
ADRL.GLND.FET-EnhA  0.542 
BLD.CD14.MONO-EnhA  0.737 
関連する問題