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?
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é.
dans l'awk
$0
est une ligne entièredonc
$1" "$1*$2" "$3*$4
créer 3 champs $1
, $1*$2
et $3*$4
$0=
Le résultat est mis à la ligne et É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.