2016-11-22 8 views
0

Ich versuche, awk nach einem Teil der Zeichen zu suchen.mit awk auf einen Teil der Zeichen

cat myfile.txt 

SIFT POLD POLH LRT  MT  MA 
T  B  B  N  P  N 
null null null null null null 
null null null null null null 
T;.;.;.;.;.  B  B  N  P  N 
D  P  B  D  D  M 
T  B  B  N  P  N 
T;T;T;. B  B  N  P;P;P N 
D;.  P  B  N  P;P  . 
T;.  B  B  N  P;P  . 

In diesem Beispiel I Linien mit SIFT = T erhalten möchte (einschließlich "T; T; T ;."); POLD = B; POLH = B; LRT = N; MT = P, MA = N

würde ich normalerweise awk verwendet, um den Job zu erledigen, zB

awk -F'\t' '$1=="T" && $2=="B" && $3=="B" && $4=="N" && $5=="P" && $6=="N" myfile.txt 

jedoch der Befehl oben ausschließen "T; T; T ;." in Spalte 1. Wie kann ich das auch einbeziehen?

+0

Ist '($ 1 == "T" || $ 1 == "T; T; T;.")' Viel zu offensichtlich eine Lösung? –

+0

Wollen Sie sagen, dass Sie T und T ausschließen möchten? Sie müssen genauer sein. Möchten Sie Zeilen abgleichen, in denen eines der Felder in Spalte 1 ein T ist, oder nur die zwei Zeilen mit 'T' und' T; T; T; .' oder etwas anderes? –

+0

"T; T; T ;." ist nur eines der Muster in der ersten Spalte. Es gibt viele andere Muster, die ein "T" enthalten. Also im Grunde möchte ich alles aus der ersten Spalte bekommen, die ein "T" hat. Es kann "T;.;.;.;.;.." Sein. oder "T; T; T ;." und so weiter. –

Antwort

1

Sie können awk wie verwenden unten

$ awk '$1 ~ /T/' file 
SIFT POLD POLH LRT  MT  MA 
T  B  B  N  P  N 
T;.;.;.;.;.  B  B  N  P  N 
T  B  B  N  P  N 
T;T;T;. B  B  N  P;P;P N 
T;.  B  B  N  P;P  . 
+0

"T; T; T ;." ist nur eines der Muster in der ersten Spalte. Es gibt viele andere Muster, die ein "T" enthalten. Also im Grunde möchte ich alles aus der ersten Spalte bekommen, die ein "T" hat. Es kann "T;.;.;.;.;.." Sein. oder "T; T; T ;." und so weiter. –

+0

@JanShamsani: beziehen Sie sich auf mein Update. – Inian

+0

Ja, das ist genau das, was ich will. Danke –

Verwandte Themen