En GNU Awk 4.1.0 (lanzado en 2013) y versiones posteriores, tiene la opción de edición de archivos "in situ":
[...] La extensión "en el lugar", creada con la nueva función, se puede usar para simular el GNU "sed -i
" función. [...]
Ejemplo de uso:
$ gawk -i inplace '{ gsub(/foo/, "bar") }; { print }' file1 file2 file3
Para mantener la copia de seguridad:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{ gsub(/foo/, "bar") }
> { print }' file1 file2 file3
A menos que tenga GNU awk 4.1.0 o posterior...
No tendrá una opción como -i
de sed opción, así que haz lo siguiente:
$ awk '{print $0}' file > tmp && mv tmp file
Nota:el -i
no es magia, también está creando un archivo temporal sed
simplemente lo maneja por ti.
A partir de GNU awk 4.1.0...
GNU awk
agregó esta funcionalidad en la versión 4.1.0 (publicada el 05/10/2013) . No es tan sencillo como simplemente dar el -i
opción como se describe en las notas publicadas:
La nueva opción -i (de xgawk) se usa para cargar archivos de biblioteca awk. Esto difiere de -f en que el primer argumento que no es una opción se trata como un script.
Debe utilizar el inplace.awk
incluido incluir archivo para invocar la extensión correctamente así:
$ cat file
123 abc
456 def
789 hij
$ gawk -i inplace '{print $1}' file
$ cat file
123
456
789
La variable INPLACE_SUFFIX
se puede utilizar para especificar la extensión de un archivo de copia de seguridad:
$ gawk -i inplace -v INPLACE_SUFFIX=.bak '{print $1}' file
$ cat file
123
456
789
$ cat file.bak
123 abc
456 def
789 hij
Estoy feliz de que se haya agregado esta característica, pero para mí, la implementación no es muy complicada ya que el poder proviene de la concisión del lenguaje y -i inplace
es 8 caracteres demasiado largo i.m.o .
Aquí hay un enlace al manual por la palabra oficial.
solo un pequeño truco que funciona
echo "$(awk '{awk code}' file)" > file