web-dev-qa-db-fra.com

Qu'est-ce que 0 $ = 1 $ signifie en awk?

Disons, j'ai un fichier texte d'entrée (sample_simple.txt) comme celui-ci:

3 1 10 1 6
9 4 2  4 1
9 2 2  2 1

En utilisant la commande: awk '$0=$1" "$1*$2" "$3*$4' sample_simple.txt, Je reçois la sortie suivante:

3 3 10
9 36 8
9 18 4

Ensuite, utilisez la commande: awk '$1*$2" "$3*$4' sample_simple.txt, rien ne change du fichier d'entrée:

3 1 10 1 6
9 4 2  4 1
9 2 2  2 1

Le seul changement entre les commandes est '$0=$1' Quelqu'un peut-il expliquer cela?

9
ADNAN ZAMAN

Ce n'est pas vraiment $0=$1; pense à ça plus comme

$0 = ($1" "$1*$2" "$3*$4)

Donc

$0=$1" "$1*$2" "$3*$4

attribue le résultat d'une concaténation à chaîne $1" "$1*$2" "$3*$4 à la variable $0 et effectue l'action par défaut {print $0}, tandis que

 $1*$2" "$3*$4

concaténe les résultats de $1*$2 et $3*$4 (avec un espace " " entre) et exécute l'action par défaut {print $0} Parce que le résultat est une chaîne non vide. La valeur de $0 n'est pas modifié.

17
steeldriver

dans l'awk

  • $0 est une ligne entière
  • la ligne peut être changée à la volée

donc

  • $1" "$1*$2" "$3*$4 créer 3 champs $1, $1*$2 et $3*$4
  • $0= Le résultat est mis à la ligne et imprimé implicitement (Voir Edition).

Éditer :

Si vous omettez $0=, la ligne de sortie n'est pas modifiée.

Comme l'a souligné SteelDriver, car la recherche est positive, la ligne est prinetd.

8
Archemar