2012-04-06 3 views
-1

Ich habe eine Datei:AWK, wie diese Anforderung in ein Array gelesen wird?

AA BB CC DD 
BB CC DD AA 
BB CC DDA AA 
CC DD AA BB 

Dieser Befehl druckt die Zeile:

$ awk '{if($3=="DD") print}' file 
BB CC DD AA 

ich diese Bedingung an das Array schreiben möchten. Dieser Befehl funktioniert nicht:

$ awk '{if($3=="DD") split($0, a, RS); print a[1]}' file 

BB CC DD AA 
BB CC DD AA 
BB CC DD AA 

Vielen Dank für Ihre Hilfe.

EDIT:

I in ein Array von Zeilen aus dem Muster 'DD' schreiben wollte.

Dies sind gute Lösungen:

awk '{if($3=="DD") {split($0, a, RS); print a[1];}}' file 
awk '$3=="DD"{split($0, a, RS); print a[1];}' file 

Dank für Ihre Hilfe danken.

+0

Es ist schwer zu verstehen, was Ihr Ziel ist. –

Antwort

1

Sie drucken das Ergebnis unabhängig davon, ob $3 == "DD", was unwahrscheinlich scheint, was Sie wollen.

Sie sind auch mit RS Spaltung, die hier nicht so für Beispielausgabe eingestellt ist, vergleichen:

awk '{if($3=="DD") {split($0, a); print a[1];}}' file 

die stattdessen mit FS spaltet (daher druckt nur BB für die weiter oben).

+0

Ich wollte in ein Array von Linien aus dem Muster "DD" schreiben. Dies sind gute Lösungen: 'awk '{if ($ 3 ==" DD ") {split ($ 0, a, RS); Drucken a [1];}} 'Datei' 'awk '$ 3 ==" DD "{split ($ 0, a, RS); Drucken Sie eine [1];} 'Datei' Vielen Dank für Ihre Hilfe. – Tedee12345

1

Ich bin mir nicht ganz klar, was Sie tun wollen, aber versuchen Sie dies:

awk '$3 == "DD" { print $1 }' file 

Die manuelle Spalten Sie tun, ist nicht benötigte in awk.

+0

Ich nehme an, das Obige ist von einem größeren awk-Skript, das eigentlich 'RS' hat, auf etwas reduziert und soll nach dem' split' weiterverarbeiten, aber das ist natürlich nicht in der Originalfrage . :-) – torek

+0

Ich wollte in ein Array von Linien aus dem Muster 'DD' schreiben. Dies sind gute Lösungen: 'awk '{if ($ 3 ==" DD ") {split ($ 0, a, RS); Drucken a [1];}} 'Datei' 'awk '$ 3 ==" DD "{split ($ 0, a, RS); Drucken Sie eine [1];} 'Datei' Vielen Dank für Ihre Hilfe. – Tedee12345

+0

Dies ist der idiomatische Weg, ohne Zweifel – C2H5OH