In questa sesta parte di Serie Awk, vedremo di usare prossimo
comando, che dice Awk per saltare tutti i modelli e le espressioni rimanenti che hai fornito, ma leggi invece la riga di input successiva.
Il prossimo
comando ti aiuta a prevenire l'esecuzione di quelli che chiamerei passaggi che fanno perdere tempo nell'esecuzione di un comando.
Per capire come funziona, consideriamo un file chiamato food_list.txt che assomiglia a questo:
Voci della lista degli alimenti
No Item_Name Prezzo Quantità. 1 Mango $3,45 5. 2 mele $2,45 25. 3 ananas $4,45 55. 4 pomodori $3,45 25. 5 Cipolle $1,45 15. 6 banane 3,45 dollari 30.
Prendi in considerazione l'esecuzione del seguente comando che contrassegnerà gli alimenti la cui quantità è inferiore o uguale a 20 con un (*)
firmare alla fine di ogni riga:
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*"; } $4 > 20 { print $0 ;} ' food_list.txt No Item_Name Prezzo Quantità. 1 mango $3.45 5* 2 mele $2,45 25. 3 ananas $4,45 55. 4 Pomodori $3,45 25 5 Cipolle $1,45 15* 6 banane 3,45 dollari 30.
Il comando sopra funziona in realtà come segue:
(*)
firmare alla fine usando l'espressione uno: $4 <= 20
$4 > 20
Ma c'è un problema qui, quando il prima espressione viene eseguita, una riga che vogliamo contrassegnare viene stampata usando: { printf "%s\t%s\n", $0,"**"; }
e poi nello stesso passaggio, il seconda espressione è anche controllato che diventa un fattore di perdita di tempo.
Quindi non è necessario eseguire la seconda espressione, $4 > 20
di nuovo dopo aver stampato le righe già contrassegnate che sono state stampate utilizzando la prima espressione.
Per affrontare questo problema, devi usare il prossimo
comando come segue:
# awk '$4 <= 20 { printf "%s\t%s\n", $0,"*"; prossimo; } $4 > 20 { print $0 ;} ' food_list.txt No Item_Name Prezzo Quantità. 1 mango $3.45 5* 2 mele $2,45 25. 3 ananas $4,45 55. 4 Pomodori $3,45 25 5 Cipolle $1,45 15* 6 banane 3,45 dollari 30.
Dopo che una singola riga di input è stata stampata utilizzando $4 <= 20
{ printf "%s\t%s\n", $0,"*"; prossimo; }
, il prossimo
comando incluso aiuterà a saltare la seconda espressione $4 > 20
{ stampa $0 ;}
, quindi l'esecuzione passa alla riga di input successiva senza dover perdere tempo a verificare se la quantità è maggiore di 20.
Il prossimo comando è molto importante è scrivere comandi efficienti e dove necessario, puoi sempre utilizzarli per velocizzare l'esecuzione di uno script. Preparati per la parte successiva della serie in cui esamineremo l'utilizzo dell'input standard (STDIN) come input per Awk.
Spero che tu possa trovare utile questa guida e che tu possa come sempre mettere per iscritto i tuoi pensieri lasciando un commento nella sezione commenti qui sotto.