tener significado separado punto puede por notas ejemplo delimitado crear convertir con compatibles como comas coma caracteristicas bloc archivo linux csv

significado - forma más rápida de convertir archivo delimitado por tabulaciones a csv en linux



csv significado (9)

Tengo un archivo delimitado por tabuladores que tiene más de 200 millones de líneas. ¿Cuál es la forma más rápida en Linux para convertir esto a un archivo csv? Este archivo tiene varias líneas de información de encabezado que tendré que quitar en el futuro, pero se conoce el número de líneas de encabezado. He visto sugerencias para sed y gawk , pero me pregunto si hay una opción "preferida".

Solo para aclarar, no hay pestañas incrustadas en este archivo.


¡La solución de pitón de @ ignacio-vazquez-abrams es genial! Para las personas que buscan analizar delimitadores de otra pestaña, la biblioteca en realidad le permite establecer delimitadores arbitrarios. Aquí está mi versión modificada para manejar archivos delimitados por tuberías:

import sys import csv pipein = csv.reader(sys.stdin, delimiter=''|'') commaout = csv.writer(sys.stdout, dialect=csv.excel) for row in pipein: commaout.writerow(row)


Creo que es mejor no robar el archivo porque puede crear un problema en el caso de un archivo grande. La mejor manera puede ser

$ tr '','' ''/t'' < csvfile.csv > tabdelimitedFile.txt

El comando obtendrá la entrada de csvfile.csv y almacenará el resultado como una pestaña separada en tabdelimitedFile.txt


Si le preocupan las comas incrustadas, deberá utilizar un método un poco más inteligente. Aquí hay una secuencia de comandos de Python que toma las líneas TSV de stdin y escribe las líneas CSV en stdout:

import sys import csv tabin = csv.reader(sys.stdin, dialect=csv.excel_tab) commaout = csv.writer(sys.stdout, dialect=csv.excel) for row in tabin: commaout.writerow(row)

Ejecútelo desde un shell de la siguiente manera:

python script.py < input.tsv > output.csv


Si todo lo que necesita hacer es traducir todos los caracteres de pestañas a caracteres de coma, tr probablemente sea el camino a seguir.

El espacio en blanco aquí es una pestaña literal:

$ echo "hello world" | tr "//t" "," hello,world

Por supuesto, si tiene pestañas incrustadas dentro de literales de cadenas en el archivo, esto también las traducirá incorrectamente; pero las pestañas literales incrustadas serían bastante poco comunes.


asumiendo que no quiere cambiar el encabezado y asumiendo que no tiene pestañas incrustadas

# cat file header header header one two three $ awk ''NR>1{$1=$1}1'' OFS="," file header header header one,two,three

NR> 1 saltea el primer encabezado. Usted mencionó que sabe cuántas líneas de encabezado, así que use el número correcto para su propio caso. con esto, tampoco necesitas llamar a ningún otro comando externo. solo un comando awk hace el trabajo.

de otra manera si tienes columnas en blanco y te preocupas por eso.

awk ''NR>1{gsub("/t",",")}1'' file

usando sed

sed ''2,$y//t/,/'' file #skip 1 line header and translate (same as tr)


el siguiente awk oneliner admite cotizaciones + cotizaciones-escapes

printf "flop/tflap/"" | awk -F ''/t'' ''{ gsub(/"/,"/"/"/"",$i); for(i = 1; i <= NF; i++) { printf "/"%s/"",$i; if( i < NF ) printf "," }; printf "/n" }''

da

"flop","flap""""


perl -lpe ''s/"/""/g; s/^|$/"/g; s//t/","/g'' < input.tab > output.csv

Perl generalmente es más rápido en este tipo de cosas que sed, awk y Python.


sed -e ''s/"///"/g'' -e ''s/<tab>/","/g'' -e ''s/^/"/'' -e ''s/$/"/'' infile > outfile

Malditos los críticos, citar todo, a CSV no le importa.

<tab> es el caracter de la pestaña real. no funcionó para mí. En bash, use ^ V para ingresarlo.


  • Si desea convertir todo el archivo tsv en un archivo csv:

    $ cat data.tsv | tr "//t" "," > data.csv

  • Si quieres omitir algunos campos:

    $ cat data.tsv | cut -f1,2,3 | tr "//t" "," > data.csv

    El comando anterior convertirá el archivo data.tsv al archivo data.csv que contiene solo los primeros tres campos.