GNU/Linux >> Tutoriales Linux >  >> Linux

Guarde las modificaciones en su lugar con awk

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

Linux
  1. Advertencia con nftw

  2. Retención de permisos de archivo con Git

  3. ¿Cómo solicito un archivo pero no lo guardo con Wget?

  4. ¿Cómo guardar la salida de este comando awk en un archivo?

  5. Guarde las modificaciones en su lugar con NON GNU awk

Comando AWK en Linux con ejemplos

Comando WC de Linux con ejemplos

Firmas digitales con GnuPG

Comando AWK en Linux/Unix

ver tamaño de archivo en linux

¿Cómo cambiar un archivo en el lugar usando awk? (como con sed -i)