GNU/Linux >> Tutoriels Linux >  >> Linux

quelle est la signification de 1 à la fin du script awk

Un awk programme est une série de paires condition-action, les conditions étant à l'extérieur des accolades et les actions y étant enfermées. Une condition est considérée comme fausse si elle est évaluée à zéro ou à la chaîne vide, tout le reste est vrai (les variables non initialisées sont zéro ou une chaîne vide, selon le contexte, elles sont donc fausses). Une condition ou une action peut être implicite; les accolades sans condition (comme la vôtre commence) sont considérées comme ayant une vraie condition et sont toujours exécutées si elles sont atteintes, et toute condition sans action imprimera la ligne si et seulement si la condition est remplie.

Le 1 à la fin de votre script se trouve une condition (toujours vraie) sans action, il exécute donc l'action par défaut pour chaque ligne, en imprimant la ligne (qui peut avoir été modifiée par l'action précédente entre accolades).


Je n'aime vraiment pas ces types de raccourcis car ils obscurcissent et induisent en erreur la façon dont ils sont analysés. Lorsque vous lisez quelque chose comme awk -F"=" '{OFS="=";gsub(",",";",$2)}1' , vous pourriez penser que le 1 modifie l'instruction précédente. Ou vous pourriez penser 1 est un alias pour {print} , ce qui n'est pas techniquement correct.

En fait, 1 est une déclaration complètement distincte. Vous pouvez séparer les déclarations comme ceci :

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

Chaque format d'instruction awk est condition {action} . S'il n'y a pas de {action} donné, alors l'action par défaut est {print} . (S'il n'y a pas de condition donnée, alors la condition par défaut est true .)

Alors ici, 1 est la condition, qui est toujours évaluée à true puisqu'il est non nul. Le action est omis, donc la valeur par défaut {print} est effectuée. Vous pouvez y penser de cette façon :

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

1 signifie imprimer chaque ligne.

L'instruction awk revient à écrire :

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

Linux
  1. Que signifie l'esperluette à la fin d'une ligne de script Shell ?

  2. Quelle est la signification de POSIX ?

  3. Que fait la ligne '!/bin/sh -e' ?

  4. Quelle est la signification de curl -k -i -X ​​sous Linux ?

  5. Que signifie un + à la fin des autorisations de ls -l ?

La signification de $ ? Dans un script shell ?

À quoi sert le Colon Builtin ':' ?

Quelles sont les différences entre grep, awk et sed ?

Quelle est la signification d'un double signe dollar dans bash/Makefile ?

Quelle est la signification de ` ! -d` dans cette commande Bash ?

Quel est le moyen le plus rapide d'exécuter un script ?