GNU/Linux >> Linux Esercitazione >  >> Linux

qual è il significato di 1 alla fine dello script awk

Un awk programma è una serie di coppie condizione-azione, le condizioni sono al di fuori delle parentesi graffe e le azioni sono racchiuse in esse. Una condizione è considerata falsa se restituisce zero o la stringa vuota, qualsiasi altra cosa è vera (le variabili non inizializzate sono zero o stringhe vuote, a seconda del contesto, quindi sono false). Può essere implicita una condizione o un'azione; le parentesi graffe senza una condizione (all'inizio della tua) sono considerate avere una condizione vera e vengono sempre eseguite se vengono colpite, e qualsiasi condizione senza un'azione stamperà la riga se e solo se la condizione è soddisfatta.

Il 1 alla fine del tuo script c'è una condizione (sempre vera) senza azione, quindi esegue l'azione predefinita per ogni riga, stampando la riga (che potrebbe essere stata modificata dall'azione precedente tra parentesi graffe).


Non mi piacciono davvero questi tipi di scorciatoie perché offusca e fuorvia il modo in cui viene analizzato. Quando leggi qualcosa come awk -F"=" '{OFS="=";gsub(",",";",$2)}1' , potresti pensare che il 1 sta modificando la dichiarazione precedente. Oppure potresti pensare a 1 è un alias per {print} , che non è tecnicamente corretto.

In realtà, 1 è una dichiarazione completamente separata. Puoi separare le istruzioni in questo modo:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'

Ogni formato dell'istruzione awk è condition {action} . Se non c'è {action} data, l'azione predefinita è {print} . (Se non c'è condition data, la condizione predefinita è true .)

Quindi qui, 1 è la condizione, che restituisce sempre true poiché è diverso da zero. Il action viene omesso, quindi il valore predefinito {print} viene eseguita. Puoi pensarla in questo modo:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'

1 significa stampare ogni riga.

L'istruzione awk equivale a scrivere:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'

Linux
  1. Cosa significa la Tilde (~) alla fine di un nome file??

  2. Il significato di $? In uno script di shell?

  3. Cosa fa la riga '!/bin/sh -e'?

  4. Qual è il significato di fork() e grep in Linux?

  5. Qual è il significato di "lista nera" su GStreamer?

Cosa significa &alla fine di un comando Linux?

Qual è il significato di un doppio segno di dollaro in bash/Makefile?

Cosa costituisce un "campo" per il comando cut?

Qual è il modo più veloce per eseguire uno script?

Qual è il significato di curl -k -i -X ​​in Linux?

Cosa significa un + alla fine dei permessi da ls -l?