Dado un archivo así
First,Last,Age
Cory,Klein,27
John Jacob,Smith,30
¿Existe una utilidad de línea de comandos para transponer el contenido de modo que la salida aparezca así?
First,Cory,John Jacob
Last,Klein,Smith
Age,27,30
text-processing
csv
Cory Klein
fuente
fuente
python
, b)ruby
no es menos portátil quepython
, yc) esto también muestra cómo pasar la entrada / salida archivos. Bravo @luikore, y bienvenidos a Unix y Linux. Por favor, quédate.El análisis CSV no se realiza fácilmente solo con las herramientas POSIX, a menos que esté utilizando una variante CSV simplificada sin comillas (de modo que las comas no puedan aparecer en un campo). Incluso entonces, esta tarea no parece fácil de hacer con awk u otro procesamiento de texto a herramienta. Puede usar Perl con
Text::CSV
, Python concsv
, R conread.csv
, Ruby con CSV , ... (Todos estos son parte de la biblioteca estándar del idioma respectivo, excepto Perl).Por ejemplo, en Python:
fuente
Desde /programming//a/2776078 :
Y luego convertir
O en la tubería
fuente
... | csvtranspose | ...
superaría eso, en cuanto a sintaxis.Una solución de bash rápida y sucia :
fuente
for ((i=1; i<=$num_cols; ++i)); do paste -s -d, <(cut -f$i -d, file.txt); done
this "is" example
la célula está codificada"this ""is"" example"
No estoy convencido si se encarga de esta solución tan adecuadamente los casosDada la limitación sugerida (sin comillas, sin comas incrustadas), es simple en awk (ya que sería en perl sin tener en cuenta más de mil líneas en
CSV.pm
, 2300 líneas encsv.rb
- python tiene solo 450 líneascsv.py
).Aquí hay un ejemplo para awk:
Por cierto: el ejemplo dado tenía espacio adicional que OP asumió que sería eliminado; los otros ejemplos no abordaron este detalle.
fuente