Tengo un archivo csv como este:
03139; 5; IT1234978208; 20150930 ; CTZ 13/31.12.15;
03137; 6; IT1234978206; 20151015 ; CTZ 13/31.11.18;
....
....
03134; 8; IT1234974406; 20151212 ; CTZ 13/37.13.17;
Estoy buscando una solución para eliminar todos los espacios en blanco de cada línea csv mediante el uso sed
del comando en Korn Shell y obtuve algo como esto:
03139;5;IT1234978208;20150930;CTZ 13/31.12.15;
03137;6;IT1234978206;20151015;CTZ 13/31.11.18;
....
....
03134;8;IT1234974406;20151212;CTZ 13/37.13.17;
¿Podria ayudarme alguien por favor?
Respuesta1
Parece que desea eliminar solo los espacios que están antes o después del punto y coma. En ese caso:
$ sed 's/[[:space:]]*;[[:space:]]*/;/g' text
03139;5;IT1234978208;20150930;CTZ 13/31.12.15;
03137;6;IT1234978206;20151015;CTZ 13/31.11.18;
....
....
03134;8;IT1234974406;20151212;CTZ 13/37.13.17;
Cómo funciona:
El comando de sustitución sed normalmente se parece a s/old/new/
donde old
hay una expresión regular. En este caso, agregamos un g
sufijo para indicarglobalsustitución (en lugar de simplemente sustituir una instancia). En nuestro caso, old
coincide con cualquier a ;
y cualquier espacio en blanco circundante: s/[[:space:]]*;[[:space:]]*
. Esto se reemplaza por new
el cual es solo un archivo ;
.
Respuesta2
Yo contestaría perl
, porque entonces puedes split
y join
:
#!/usr/bin/env perl
use strict;
use warnings;
while ( <DATA> ) {
chomp;
my @fields = split /;/;
s/\s+//g for @fields;
print join ";", @fields, "\n";
}
__DATA__
03139; 5; IT1234978208; 20150930 ; CTZ 13/31.12.15;
03137; 6; IT1234978206; 20151015 ; CTZ 13/31.11.18;
03134; 8; IT1234974406; 20151212 ; CTZ 13/37.13.17;
Ahora, eso elimina todos los espacios en los campos, dando:
03139;5;IT1234978208;20150930;CTZ13/31.12.15;
03137;6;IT1234978206;20151015;CTZ13/31.11.18;
03134;8;IT1234974406;20151212;CTZ13/37.13.17;
Pero si sólo quieres eliminar el espacio inicial/final:
s/^\s+|\s+$//g para @fields;
Esto puede ser de una sola línea como:
perl -F; -lape 's/^\s+|\s+$//g for @F; print join ";", @F;'
Dónde:
-F;
establece delimitador-l
dice eliminar/volver a agregar finales de línea automáticamente.-a
se divide automáticamente (en el delimitador-F
o espacio en blanco de forma predeterminada)-e
es "ejecutar este fragmento".