Dans GNU Awk 4.1.0 (publié en 2013) et versions ultérieures, il a la possibilité d'éditer les fichiers "sur place":
[...] L'extension "inplace", construite à l'aide de la nouvelle installation, peut être utilisée pour simuler le GNU "
sed -i
" fonctionnalité. [...]
Exemple d'utilisation :
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
Pour conserver la sauvegarde :
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
Sauf si vous avez GNU awk 4.1.0 ou version ultérieure...
Vous n'aurez pas une telle option comme -i
de sed option donc à la place faites :
$ awk '{print $0}' file > tmp && mv tmp file
Remarque :le -i
n'est pas magique, c'est aussi créer un fichier temporaire sed
gère juste pour vous.
Depuis GNU awk 4.1.0...
GNU awk
ajout de cette fonctionnalité dans la version 4.1.0 (publié le 10/05/2013) . Ce n'est pas aussi simple que de simplement donner le -i
option comme décrit dans les notes publiées :
La nouvelle option -i (de xgawk) est utilisée pour charger les fichiers de bibliothèque awk. Cela diffère de -f en ce que le premier argument non optionnel est traité comme un script.
Vous devez utiliser le inplace.awk
fourni inclure le fichier pour invoquer l'extension correctement comme ceci :
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
La variable INPLACE_SUFFIX
peut être utilisé pour spécifier l'extension d'un fichier de sauvegarde :
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
Je suis content que cette fonctionnalité ait été ajoutée mais pour moi, l'implémentation n'est pas très compliquée car la puissance vient de la concision du langage et de -i inplace
contient 8 caractères de trop i.m.o .
Voici un lien vers le manuel pour le mot officiel.
juste une petite astuce qui marche
echo "$(awk '{awk code}' file)" > file