Domanda

Dato seguente comando:

echo "1: " | awk '/1/ -F ":" {print $1}'

Perché awk uscita:

1: 
È stato utile?

Soluzione

"- F" è un argomento della riga di comando non awk sintassi, provare:

 echo "1: " | awk -F  ":" '/1/ {print $1}'

Altri suggerimenti

Se volete farlo programatically, è possibile utilizzare la variabile FS:

echo "1: " | awk 'BEGIN { FS=":" } /1/ { print $1 }'

Si noti che se si modifica nel ciclo principale piuttosto che il ciclo BEGIN, ci vuole incidere per il Avanti linea di lettura in, dato che la linea attuale è già stata divisa.

Si dispone di più modi per : insieme come separatore:

awk -F: '{print $1}'

awk -v FS=: '{print $1}'

awk '{print $1}' FS=:

awk 'BEGIN{FS=":"} {print $1}'

Tutti loro sono equivalenti e per un torneranno 1 per un ingresso campione "1: 2: 3":

$ awk -F: '{print $1}' <<< "1:2:3"
1
$ awk -v FS=: '{print $1}' <<< "1:2:3"
1
$ awk '{print $1}' FS=: <<< "1:2:3"
1
$ awk 'BEGIN{FS=":"} {print $1}' <<< "1:2:3"
1

-F è un argomento per awk stessa:

$echo "1: " | awk -F":" '/1/ {print $1}'
1

Si può anche usare una regex come separatore di campo, la segue stampa "bar", utilizzando una regex per impostare il numero "10" come separatore.

echo "foo 10 bar" | awk -F'[0-9][0-9]' '{print $2}'

AWK lavora come interprete di testo che va formato da linee per l'intero documento e che va fieldwise per ogni riga in tal modo $ 1, $ 2 .. $ n sono i riferimenti ai campi di ciascuna linea ($ 1 è il primo campo, $ 2 è il secondo campo e così via ...). È possibile definire un separatore di campo utilizzando l'interruttore "-F" sotto la riga di comando o all'interno di due staffe con "FS = ...". Consideriamo ora la risposta di "JUERGEN":

echo "1: " | awk -F  ":" '/1/ {print $1}'

Sopra i confini dei campi vengono impostati da ":" quindi abbiamo due campi di $ 1 che è "1" e $ 2, che è la space.After vuota, viene l'espressione regolare "/ 1 /" che indica il filtro per l'uscita del primo campo solo quando le inciampi interprete su una riga contenente una tale espressione (intendo 1); L'output del comando "echo" è una riga che contiene "1" in modo che il filtro possa funzionare ...

Quando si tratta con il seguente esempio:

echo "1: " | awk '/1/ -F ":" {print $1}'

La sintassi è disordinato e la interprete ha scelto di ignorare la parte F ":" e commuta allo splitter campo predefinito che è lo spazio vuoto in uscita così "1:" come primo campo e non ci sarà un secondo campo

La risposta del JUERGEN contiene la buona sintassi ...

Nessuna necessità di scrivere questo molto. Basta mettere il separatore di campo desiderato con l'opzione -F al comando awk e il numero di colonna che si desidera stampare segregata secondo il vostro separatore di campo menzionato.

echo "1: " | awk -F: '{print $1}'    
1

echo "1#2" | awk -F# '{print $1}'  
1

In alternativa si può usare:

echo "1: " | awk  '/1/{print $1-":"}' 

Questo è davvero divertente equazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top