Saltar al contenido

¿Cómo `… | awk ‘$1=$1’` eliminar espacios extra?

Esta es la contestación más acertada que encomtrarás compartir, pero mírala pausadamente y analiza si es compatible a tu proyecto.

Solución:

Cuando asignamos un valor a una variable de campo, es decir. el valor de $1 se asigna al campo $1, awk en realidad reconstruye su $0 concatenándolos con el espacio delimitador de campo predeterminado (u OFS).

también podemos obtener el mismo caso en los siguientes escenarios…

echo -e "foo footbarttbar" | awk '$1=$1'
foo foo bar bar

echo -e "foo footbarttbar" | awk -v OFS=',' '$1=$1'
foo,foo,bar,bar

echo -e "foo footbarttbar" | awk '$3=1'
foo foo 1 bar

Para GNU AWK, este comportamiento se documenta aquí:
https://www.gnu.org/software/gawk/manual/html_node/Changing-Fields.html

$1 = $1 # obligar a reconstituir el registro

echo "$string" | awk '$1=$1'

hace que AWK evalúe $1=$1que se asigna el campo a sí mismo y tiene el efecto secundario de reevaluar $0; luego AWK considera el valor de la expresión, y debido a que no es cero ni está vacío, ejecuta la acción predeterminada, que es imprimir $0.

Los espacios adicionales se eliminan cuando AWK vuelve a evaluar $0: lo hace concatenando todos los campos usando OFS como separador, y eso es un solo espacio por defecto. Cuando AWK analiza un registro, $0 contiene el registro completo, tal cual, y $1 para $NF contener los campos, sin los separadores; cuando se asigna cualquier campo, $0 se reconstruye a partir de los valores de campo.

Si AWK genera algo en este ejemplo depende de la entrada:

echo "0      0" | awk '$1=$1'

no generará nada.

Sección de Reseñas y Valoraciones

Puedes añadir valor a nuestro contenido informacional aportando tu veteranía en los comentarios.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *