¿Cómo ordenar un archivo delimitado por tabulaciones con el comando ordenar?
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?
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 .
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).
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.