Que signifie awk '{print $1+0.45 " " $2 " " $3 }' positionXYZ > positionX0.45YZ
signifie ? Cela signifie-t-il modifier une ligne dans le premier fichier et mettre les nouvelles données dans le second ?
Réponse acceptée :
Décomposons cela. awk '{foo}' file
appliquera l'expression foo
à chaque ligne du file
et imprimez le résultat sur le terminal (sortie standard). awk
divise ses lignes d'entrée sur un espace blanc (par défaut) et enregistre chaque champ sous $1
, $2
etc.
Ainsi, l'expression réelle que vous exécutez signifie :lisez chaque ligne d'entrée, ajoutez 0,45 à la valeur du premier champ, puis imprimez ce champ ainsi que le deuxième et le troisième. Cela s'explique plus facilement avec un exemple simple :
$ cat file.txt
10 20 30 40
50 60 70 80
$ awk '{print $1+0.45 " " $2 " " $3 }' file.txt
10.45 20 30
50.45 60 70
Donc, comme vous pouvez le voir, le awk
le script a ajouté 0,45 au premier champ de chaque ligne, puis l'a imprimé avec le deuxième et le troisième. Le quatrième a été ignoré puisque vous ne lui avez pas dit d'imprimer $4
.
Le bit suivant n'a rien à voir avec awk
, le >
symbol est pour la redirection de sortie et est utilisé par le shell (bash ou zsh ou tout ce que vous utilisez). En général command > file
enregistrera la sortie de la command
dans le fichier file
écraser le contenu du fichier s'il existe et de le créer s'il n'existe pas.
Rassembler le tout :
$ ls
file.txt
$ cat file.txt
10 20 30 40
50 60 70 80
$ awk '{print $1+0.45 " " $2 " " $3 }' file.txt > file2.txt
$ ls
file2.txt file.txt
$ cat file2.txt
10.45 20 30
50.45 60 70