2016-09-07 3 views
0

Ich muss zwei Muster in einer Protokolldatei übereinstimmen und müssen die Ausgabe als Tabelle erhalten, wenn möglich. Die Protokolldatei mehrere Zeilen mit den Worten habe ich hier übereinstimmen soll, ist ein Beispiel für die Protokolldatei:Match zwei Muster in der Protokolldatei und Ausgabe als Tabelle

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 

Ich möchte eine Ausgabe wie diese (Tab als Textdatei exportieren getrennt) erhalten:

Group Pvalue 
ADRL.GLND.FET-EnhA 0.542 
BLD.CD14.MONO-EnhA 0.737 

ich mag würde es in bash tun, wenn es

EDIT möglich ist:

Dies ist, was ich versucht habe:

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

Können Sie fügen Sie, was haben Sie versucht? –

Antwort

1

Nullfehlerprüfung:

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

Wenn eine Zeile --out hat, druckt den Basisnamen des durch eine Lasche gefolgt Pfades. Wenn eine Zeile p-value = hat, wird die Nummer und ein Zeilenumbruch gedruckt.

awk ist in diesem Fall nett, weil Sie die Zeilen ändern können, die Sie zuordnen. In Bezug auf grep denken, müssten Sie zusätzliche Tools bereitstellen (wie sed), um die gewünschten Teile zu erhalten, und sie dann in ein nützliches Formular zusammenfügen. Ihre Verwendung von grep und paste ist tapfer, und mit Tweaking würde funktionieren, auf Kosten von viel mehr Prozessen und bereitgestellten Tools.

Sie könnten dies in einem größeren Block von awk Pattern Matching tun, die kugelsicherer wäre. Ich werde als Übung für den Leser gehen.

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 

oder wenn Sie es vorziehen:

$ 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