2010-08-18 27 views

Respuesta

0

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.

-2

En UNIX:

sed -i -e 's/\t/,/g' filename 
23

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 
+3

Esto no no funciona en OS X, parece coincidir con la letra "t" y no con una pestaña. – Mike

+0

En lugar de escribir \ t en OSX, presione ctrl + v y luego presione tab – TheAppchemist

+0

@codaddict, si puedo preguntar, ¿qué es esa 'g' en '' s/\ t /, g''? – Les

0

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.

2

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.

28

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 
+2

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

3

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; 
0

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

Cuestiones relacionadas