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 ' '