unix - separado - texto delimitado por tabulaciones excel
Cómo convertir un archivo separado por tabulaciones en un archivo separado por comas (8)
¿Es esto lo habitual de las preguntas fáciles en todos los idiomas? Bueno, aquí está mi solución de haskell:
main = interact (unlines . replTab . lines) where
replTab l = l >>= (/line ->
"/"" ++ line "/"" >>= /char ->
case char of
''/t'' -> "/",/""
''"'' -> "/"/""
_ -> [char]
)
No probado, pero debería funcionar.
PD: Todas las demás soluciones no son conscientes de que se escapan comas.
Quiero convertir un archivo separado por pestañas en un archivo csv
Alguien puede ayudarme
En unix:
sed -i -e ''s//t/,/g'' filename
Esto también se puede lograr con Perl:
Para canalizar los resultados a un nuevo archivo de salida, puede utilizar lo siguiente:
perl -wnlp -e ''s//t/,/g;'' input_file.txt > output_file.csv
Si desea editar el archivo en su lugar, puede invocar la opción -i:
perl -wnlpi -e ''s//t/,/g;'' input_file.txt
Si por casualidad encuentra que lo que está tratando no es en realidad pestañas, sino varios espacios, puede usar lo siguiente para reemplazar cada aparición de dos o más espacios con una coma:
perl -wnlpi -e ''s//s+/,/g;'' input_file
Tenga en cuenta que /s
representa cualquier carácter de espacio en blanco, incluidos los espacios, las pestañas o las líneas nuevas y no se puede utilizar en la cadena de reemplazo.
Intenta reemplazar todas las pestañas con comas.
Posiblemente con una expresión regular como s//t/,/g
, si no tiene ningún campo entre comillas.
O, ya sabes, Excel podría hacer eso por ti. O R. O cualquier cosa que pueda tomar en un archivo TSV.
La respuesta para OSX es diferente.
MacOS no entiende /t
en la expresión sed
.
Debe insertar el literal de la pestaña en el patrón de búsqueda sed utilizando ctrl + v y luego la pestaña (consulte ¿Cómo puedo insertar un carácter de pestaña con sed en OS X? )
sed ''s/ /,/g'' input_file > output_file
Puedes usar sed como:
sed ''s//t/,/g'' input_file > output_file
Esto mantendrá el archivo de entrada sin cambios y creará un nuevo archivo de archivo de output_file
con los cambios.
Si desea cambiar el archivo de entrada sin crear un nuevo archivo, puede usar la opción -i
para hacer cambios in situ:
sed -i ''s//t/,/g'' input_file
Tenga en cuenta que hay muchos tipos de archivos de valores separados por comas. Como no especificó uno, asumiré el formato RFC-4180 , en codificación UTF-8, y el TSV será el mismo, pero se usarán tabulaciones en lugar de comas.
El enfoque ingenuo sería simplemente reemplazar cada pestaña con una coma:
tr ''/t'' ,
Esto cae si alguno de los valores ya contiene una coma, o si alguno contiene una pestaña entre comillas. Deberá analizar el archivo de manera mínima, para mantener la cotización. En lugar de hacer rodar manualmente un analizador de este tipo, es más sencillo, claro y flexible utilizar uno ya escrito, como Text::CSV
para Perl:
#!/usr/bin/perl -w
use Text::CSV;
my $tsv = Text::CSV->new({ sep_char => "/t", auto_diag => 2 });
my $csv = Text::CSV->new();
while (my $row = $tsv->getline(*ARGV)) {
$csv->print(STDOUT, $row) or die $csv->error_diag();
print $/;
}
$csv->error_diag() unless $tsv->eof;
sed -e ''s / TAB_CHAR /, / g'' data.tsv> data.csv
La parte difícil es cómo ingresar el carácter TAB en la línea de comando, para hacerlo: solo hist "CTRL + V", luego TAB
Con frecuencia uso esto con las consultas de mysql con el parámetro -e como se describe en esta publicación del blog http://blog.modsaid.com/2013/12/exporting-data-from-remote-mysql.html