Quiero convertir un archivo separado pestaña en un archivo csvCómo convertir un archivo separado por tabulaciones en coma archivo separado por
Puede alguien ayudarme a
Quiero convertir un archivo separado pestaña en un archivo csvCómo convertir un archivo separado por tabulaciones en coma archivo separado por
Puede alguien ayudarme a
intente reemplazar todas las fichas por 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.
En UNIX:
sed -i -e 's/\t/,/g' filename
Usted puede usar sed como:
sed 's/\t/,/g' input_file > output_file
Esto evitará que el archivo de entrada sin cambios y va a crear un nuevo archivo output_file
con los cambios.
Si desea cambiar el archivo de entrada en sí, sin crear un nuevo archivo que se pueda utilizar -i
opción de sed hacer InPlace cambios:
sed -i 's/\t/,/g' input_file
Es esta la costumbre cosa fácil de interrogación-all-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 las comas que se escapan.
Esto también se puede lograr con Perl:
Con el fin de canalizar los resultados a un nuevo archivo de salida se puede utilizar lo siguiente:
perl -wnlp -e 's/\t/,/g;' input_file.txt > output_file.csv
Si desea editar el archivo en lugar, se puede invocar la opción -i:
perl -wnlpi -e 's/\t/,/g;' input_file.txt
Si por alguna casualidad usted encuentra que lo que se trata de que no es en realidad pestañas, pero en lugar de múltiples espacios, puede utilizar el siguiente para reemplazar cada occurren ce 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, tabuladores o saltos de línea y no se pueden utilizar en la cadena de reemplazo.
La respuesta para OSX es diferente.
MacOS no entiende \t
en la expresión sed
.
Tienes que insertar la pestaña literal en el patrón de búsqueda sed mediante el uso de ctrl + v continuación pestaña (ver How can I insert a tab character with sed on OS X?)
sed 's/ /,/g' input_file > output_file
En OSX puedes usar GNU sed que entiende '\ t'. [Esta pregunta] (http://stackoverflow.com/questions/30003570/how-to-use-gnu-sed-on-mac-os-x) trata sobre cómo instalarlo. – janosdivenyi
tener en cuenta que hay muchos sabores de coma -separated-value file Como no especificó uno, asumiré el formato RFC-4180, en codificación UTF-8, y el TSV será el mismo, pero usando pestañas en lugar de comas.
El enfoque ingenuo sería simplemente para reemplazar cada pestaña con una coma:
tr '\t' ,
Esto se cae si alguno de los valores ya contienen una coma, o si alguna contienen una pestaña citado. Necesitará analizar minimamente el archivo, para mantener las cotizaciones. En vez de la mano de laminación en un analizador tal, es más simple, más clara y más flexible para 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 entrar en el carácter de tabulación en la línea de comandos, para hacer eso: Sólo hist "CTRL + V", a continuación, TAB
Suelo utilizar esto con las consultas de bases de datos MySQL - e parámetro como se describe en esta publicación de blog http://blog.modsaid.com/2013/12/exporting-data-from-remote-mysql.html
Esto no no funciona en OS X, parece coincidir con la letra "t" y no con una pestaña. – Mike
En lugar de escribir \ t en OSX, presione ctrl + v y luego presione tab – TheAppchemist
@codaddict, si puedo preguntar, ¿qué es esa 'g' en '' s/\ t /, g''? – Les