Saltar al contenido

Recorta los espacios iniciales y finales de una cadena en awk

Solución:

Si desea recortar todos los espacios, solo en las líneas que tienen una coma, y ​​use awk, entonces lo siguiente funcionará para usted:

awk -F, '/,/{gsub(/ /, "", $0); print} ' input.txt

Si solo desea eliminar espacios en la segunda columna, cambie la expresión a

awk -F, '/,/{gsub(/ /, "", $2); print$1","$2} ' input.txt

Tenga en cuenta que gsub sustituye al personaje en // con la segunda expresión, en la variable que es el tercer parámetro, y lo hace in-place – en otras palabras, cuando está hecho, el $0 (o $2) ha sido modificado.

Explicación completa:

-F,            use comma as field separator 
               (so the thing before the first comma is $1, etc)
/,/            operate only on lines with a comma 
               (this means empty lines are skipped)
gsub(a,b,c)    match the regular expression a, replace it with b, 
               and do all this with the contents of c
print$1","$2   print the contents of field 1, a comma, then field 2
input.txt      use input.txt as the source of lines to process

EDITAR Quiero señalar que la solución de @ BMW es mejor, ya que en realidad solo recorta los espacios iniciales y finales con dos gsub comandos. Mientras le doy crédito, daré una explicación de cómo funciona.

gsub(/^[ t]+/,"",$2);    - starting at the beginning (^) replace all (+ = zero or more, greedy)
                             consecutive tabs and spaces with an empty string
gsub(/[ t]+$/,"",$2)}    - do the same, but now for all space up to the end of string ($)
1                         - ="true". Shorthand for "use default action", which is print $0
                          - that is, print the entire (modified) line

eliminar el inicio y el final espacio en blanco en la segunda columna

awk 'BEGIN{FS=OFS=","}{gsub(/^[ t]+/,"",$2);gsub(/[ t]+$/,"",$2)}1' input.txt

de otra manera por un gsub:

awk 'BEGIN{FS=OFS=","} {gsub(/^[ t]+|[ t]+$/, "", $2)}1' infile

Advertencia de @Geoff: vea mi nota a continuación, solo una de las sugerencias en esta respuesta funciona (aunque en ambas columnas).

yo usaría sed:

sed 's/, /,/' input.txt

Esto eliminará el espacio inicial después de la , . Producción:

Name,Order
Trim,working
cat,cat1

Más general podría ser lo siguiente, eliminará posiblemente varios espacios y / o pestañas después de la ,:

sed 's/,[ t]?/,/g' input.txt

También funcionará con más de dos columnas debido al modificador global /g


@Floris pidió en la discusión una solución que elimine los espacios en blanco finales y finales en cada columna (incluso la primera y la última) sin eliminar los espacios en blanco en el medio de una columna:

sed 's/[ t]?,[ t]?/,/g; s/^[ t]+//g; s/[ t]+$//g' input.txt

* EDIT por @Geoff, agregué el nombre del archivo de entrada a este, y ahora solo elimina todos los espacios iniciales y finales (aunque de ambas columnas). Las otras sugerencias dentro de esta respuesta no funcionan. Pero prueba: “Varios espacios y 2 espacios antes de aquí” *


OMI sed es la herramienta óptima para este trabajo. Sin embargo, aquí viene una solución con awk porque lo has pedido:

awk -F', ' '{printf "%s,%sn", $1, $2}' input.txt

Otra solución simple que viene a la mente para eliminar todos los espacios en blanco es tr -d:

cat input.txt | tr -d ' '
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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