2016-04-26 17 views

Antwort

7

Wenn Sie Linien gehen durch awk verwenden, wird das Feldtrennzeichen verwendet, bevor der Datensatz verarbeitet. awk liest den Datensatz gemäß den aktuellen Werten von FS und RS und fährt mit der Ausführung der Operationen fort, für die Sie ihn anfordern.

Das heißt, wenn Sie beim Lesen eines Datensatzes den Wert FS einstellen, hat dies keine Auswirkungen auf diesen spezifischen Datensatz. Stattdessen für das nächste und darüber hinaus.

Also, wenn Sie eine Datei wie diese:

$ cat a 
1,2 3,4 
5,6 7,8 

Und Sie setzen das Feldtrenn während eines Datensatz zu lesen, dauert es ab der nächsten Zeile:

$ awk '{FS=","} {print $1}' a 
1,2 
5 

Also, was Sie wollen zu tun ist, die FS vor dem Lesen der Datei zu setzen. Das heißt, in dem BEGIN-Block oder über den Parameter:

$ awk 'BEGIN{FS=","} {print $1}' a 
1 
5 
$ awk -F, '{print $1}' a 
1 
5 

Es gibt auch eine andere Art und Weise: kann awk den vollständigen Datensatz neu berechnen. Damit nehmen awk Konto in den aktuellen FS und entsprechend handeln:

$ awk '{FS=","} {$0=$0;print $1}' a 
1 
5 
+0

Angenommen, meine ersten Zeile ist 'Cal_Tno_V19_F04_R02'. Wie benutzt man 'awk', um' Cal_Tno' zu drucken, dh die ersten 2 Felder mit Trennzeichen zu drucken? – Sigur

+0

@Sigur das scheint eine völlig andere Frage zu sein, was ich hier beantwortete. Es ist besser, wenn Sie [eine neue Frage stellen] (/ fragen/stellen) genügend Details zur Verfügung stellen! – fedorqui

3

awk-Anweisung falsch verwendet

korrekte Art und Weise

ist
awk 'BEGIN { FS = "#{delimiter}" } ; { print $1 }' 

In Ihrem Fall Sie

awk 'BEGIN { FS = "_length" } ; { print $1 }' 
0

Inbuilt Variablen wie FS, ORS usw. müssen in einem Kontext gesetzt werden können dh in 1 der folgenden Blöcke: BEGIN, Konditionsblöcke oder END.

$ echo 'NODE_1_length_317516_cov_18.568_ID_4005' | awk 'BEGIN{FS="_length"} {print $1}' 
NODE_1 
$ 

Sie können auch das Trennzeichen -F Schalter wie folgt passieren:

$ echo 'NODE_1_length_317516_cov_18.568_ID_4005' | awk -F "_length" '{print $1}' 
NODE_1 
$ 
Verwandte Themen