¿Cómo ordenar un archivo delimitado por tabulaciones con el comando ordenar?

Resuelto neversaint asked hace 15 años • 11 respuestas

Tengo un dato con el siguiente formato:

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

Ahora intenté ordenar el archivo según el último campo de forma decreciente. Probé los siguientes comandos pero no se ordenaron 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?

neversaint avatar Jun 24 '09 16:06 neversaint
Aceptado

Usando bash , esto funcionará:

$ sort -t$'\t' -k3 -nr file.txt

Observe el signo de dólar delante de la cadena entre comillas simples. Puede leer sobre esto en las secciones de citas ANSI-C de la página de manual de bash .

Lars Haugseth avatar Jun 24 '2009 10:06 Lars Haugseth

De forma predeterminada, el delimitador de campo no es una transición en blanco a blanco, por lo que la pestaña debería funcionar bien.

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

sort -k4nr file.txt

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

laalto avatar Jun 24 '2009 10:06 laalto

Debe colocar un carácter de tabulación real después de -t\ y para hacerlo en un shell, presione ctrl-v y luego el carácter de tabulación. La mayoría de los shells que he usado admiten este modo de entrada de tabulación literal.

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

Brian Carlsen avatar Dec 16 '2014 00:12 Brian Carlsen