sort por ejemplos comando columna sorting sed awk

sorting - por - grep linux



Bash: ordenar el archivo de texto por el Ășltimo valor de campo (6)

¿Tal vez invertir los campos de cada línea en el archivo antes de ordenar? Algo como

perl -ne ''chomp; print(join(",",reverse(split(","))),"/n")'' | sort -t, -n -k1 | perl -ne ''chomp; print(join(",",reverse(split(","))),"/n")''

debe hacerlo, siempre y cuando las comas nunca se citan de ninguna manera. Si se trata de un archivo CSV completo (en el que las comas se pueden citar con barra invertida o espacio), entonces necesita un analizador CSV real.

Tengo un archivo de texto que contiene ~ 300k filas. Cada fila tiene un número variable de campos delimitados por comas, el último de los cuales se garantiza de forma numérica. Quiero ordenar el archivo por este último campo numérico. No puedo hacer

sort -t, -n -k 2 file.in > file.out

como el número de campos en cada fila no es constante. Creo que sed, awk quizás la respuesta, pero no estoy seguro de cómo. P.ej:

awk -F, ''{print $NF}'' file.in

me da el último valor de columna, pero ¿cómo usar esto para ordenar el archivo?


Perl de una sola línea:

@lines=<STDIN>;foreach(sort{($a=~/.*,(/d+)/)[0]<=>($b=~/.*,(/d+)/)[0]}@lines){print;}


Python de una sola línea:

python -c "print ''''.join(sorted(open(''filename''), key=lambda l: int(l.split('','')[-1])))"


Usa awk para poner la tecla numérica al frente. $NF es el último campo del registro actual. Ordenar. Utilice sed para eliminar la clave duplicada.

awk -F, ''{ print $NF, $0 }'' yourfile | sort -n -k1 | sed ''s/^[0-9][0-9]* //''


Voy a lanzar el mío aquí como alternativa (y no pude hacerme cargo de que funcione) :)

archivo de muestra:

Call of Doody 1322 Seam the Ripper 1329 Mafia Bots 1 1109 Chicken Fingers 1243 Batup Light 1221 Hunter F Tomcat 1140 Tober 0833

código:

for i in `sed -e ''s/.* /(/d/)*//1/'' file.txt | sort`; do grep $i file.txt; done > file_sort.txt


vim file.in -c ''%sort n /.*,/zs/'' -c ''saveas file.out'' -c ''q''