txt texto tabulaciones separado por pipes para macro exportar espacios delimitar delimitado datos convertir como comas barras archivo linux unix sorting tab-delimited

linux - texto - Ordenando un archivo delimitado por tabuladores



macro para exportar datos de excel a txt (9)

Tengo una información con el siguiente formato:

foo<tab>1.00<space>1.33<space>2.00<tab>3

Ahora traté de ordenar el archivo según el último campo de forma decreciente. Intenté los siguientes comandos pero no se ordenó como esperábamos.

$ sort -k3nr file.txt # apparently this sort by space as delimiter $ sort -t"/t" -k3nr file.txt sort: multi-character tab `//t'' $ sort -t "`/bin/echo ''/t''`" -k3,3nr file.txt sort: multi-character tab `//t''

¿Cuál es la forma correcta de hacerlo?

Aquí está la muestra de datos .


Debe colocar un carácter de tabulación real después de -t / y para hacerlo en un intérprete de comandos, pulse ctrl-v y luego el carácter de tabulación. La mayoría de los proyectiles que he usado admiten este modo de entrada de tabulación literal.

Tenga cuidado, sin embargo, porque copiar y pegar desde otro lugar generalmente no conserva las pestañas.


En general, mantener datos como este no es una gran cosa si se puede evitar, porque las personas siempre confunden pestañas y espacios.

La solución de su problema es muy sencilla en un lenguaje de scripting como Perl, Python o Ruby. Aquí hay un código de ejemplo:

#!/usr/bin/perl -w use strict; my $sort_field = 2; my $split_regex = qr{/s+}; my @data; push @data, "7 8/t 9"; push @data, "4 5/t 6"; push @data, "1 2/t 3"; my @sorted_data = map { $_->[1] } sort { $a->[0] <=> $b->[0] } map { [ ( split $split_regex, $_ )[$sort_field], $_ ] } @data; print "unsorted/n"; print join "/n", @data, "/n"; print "sorted by $sort_field, lines split by $split_regex/n"; print join "/n", @sorted_data, "/n";


Estaba teniendo este problema con ordenar en cygwin en un shell bash al usar ''general-numérico-sort''. Si especifiqué -t$''/t'' -kFg , donde F es el número del campo, no funcionó, pero cuando especifiqué tanto -t$''/t'' como -kF,Fg (por ejemplo, -k7,7g para el 7mo campo) funcionó. -kF,Fg sin -t$''/t'' no funcionó.


La $ solución no funcionó para mí. Sin embargo, al poner realmente el carácter de tabulación en el comando lo hizo: ordenar -t '''' -k2


Por defecto, el delimitador de campo no está en blanco para la transición en blanco, por lo que la pestaña debería funcionar bien.

Sin embargo, las columnas están indexadas base 1 y base 0 por lo que probablemente desee

sort -k4nr file.txt

para ordenar archivo.txt por columna 4 numéricamente en orden inverso. (Aunque los datos en la pregunta tienen incluso 5 campos, el último campo sería el índice 5).


Quería una solución para Gnu sort en Windows, pero ninguna de las soluciones anteriores funcionó para mí en la línea de comandos.

Utilizando la pista de Lloyd, el siguiente archivo por lotes (.bat) funcionó para mí.

Escriba el carácter de tabulación dentro de las comillas dobles.

C:/>cat foo.bat sort -k3 -t" " tabfile.txt


Si desea hacerlo más fácil solo con pestañas, reemplace los espacios con pestañas:

cat <file> | tr " " "/t" | sort <options>



páselo por algo como awk ''{ print print $1"/t"$2"/t"$3"/t"$4"/t"$5 }'' . Esto cambiará los espacios en pestañas.