¿Cómo puedo usar ordenar 2 columnas? por ejemplo, quiero ordenar por la columna 6 primero y ordenar por la columna 3 en segundo lugar.
user2452340
1
Esto no funcionará si hay cadenas entre comillas que contienen comas en el CSV (a menos que la columna por la que desee ordenar sea anterior a la columna que contiene comas). Es posible que primero tenga que hacer una pasada con awk (usando FPAT = "[^,] * | \" [^ \ "] * \" "y OFS =" | "o algún otro delimitador que pueda usar con sort)
davemyron
1
@ user2452340 Puede hacer esto: sort -t, -nk3 filename.csv | sort -t, -nk6- primero se ordenará por la columna 3, luego lo ordenará por la columna 6 para que la columna 6 esté ordenada correctamente hasta el final y para cualquier fila donde la columna 6 sea la misma, se ordenarán por la columna 3 .
Mateo
3
@Matthew sort -t ',' -k3,3n -k6,6nserá mejor. -k3usará la columna 3 y el resto de la línea.
Kusalananda
1
Solo necesitaba la -t, para dividir mi archivo de 2 columnas dividido por comas, gracias jaypal
Ricardo Rivera Nieves
20
Utilice awk para poner el ID de usuario al principio.
Ordenar
Utilice sed para eliminar el ID de usuario duplicado, asumiendo que los ID de usuario no contienen espacios.
Esto es muy útil, especialmente si necesita analizar o combinar columnas para agregar un campo de clasificación y luego conservar solo la línea original. Usé awk / split para analizar / combinar los campos de fecha y hora para ordenarlos y luego eliminarlos.
skytaker
1
sortya sabe cómo ordenar por una columna en particular, pero esta técnica, conocida como la transformación de Schwartzian , es útil cuando el campo que desea ordenar no es trivialmente una columna bien definida.
tripleee
10
Puede elegir un delimitador, en este caso elegí dos puntos e imprimí la columna número uno, ordenando por orden alfabético:
sort -t, -k3 file
Respuestas:
¿Qué tal solo
sort
?sort -t, -nk3 user.csv
dónde
-t,
- define su delimitador como,
.-n
- le da orden numérico. Agregado desde que lo agregó en su intento. Si su campo de usuario es solo texto, entonces no lo necesita.-k3
- define el campo (clave). usuario es el tercer campo.fuente
sort -t, -nk3 filename.csv | sort -t, -nk6
- primero se ordenará por la columna 3, luego lo ordenará por la columna 6 para que la columna 6 esté ordenada correctamente hasta el final y para cualquier fila donde la columna 6 sea la misma, se ordenarán por la columna 3 .sort -t ',' -k3,3n -k6,6n
será mejor.-k3
usará la columna 3 y el resto de la línea.Utilice sed para eliminar el ID de usuario duplicado, asumiendo que los ID de usuario no contienen espacios.
awk -F, '{ print $3, $0 }' user.csv | sort | sed 's/^.* //'
fuente
sort
ya sabe cómo ordenar por una columna en particular, pero esta técnica, conocida como la transformación de Schwartzian , es útil cuando el campo que desea ordenar no es trivialmente una columna bien definida.Puede elegir un delimitador, en este caso elegí dos puntos e imprimí la columna número uno, ordenando por orden alfabético:
awk -F\: '{print $1|"sort -u"}' /etc/passwd
fuente
awk -F, '{ print $3, $0 }' user.csv | sort -nk2
y por orden inverso
awk -F, '{ print $3, $0 }' user.csv | sort -nrk2
fuente
prueba esto -
awk '{print $0|"sort -t',' -nk3 "}' user.csv
O
sort -t',' -nk3 user.csv
fuente
awk -F "," '{print $0}' user.csv | sort -nk3 -t ','
Esto debería funcionar
fuente
Para excluir la primera línea (encabezado) de la clasificación, la divido en dos búferes.
df | awk 'BEGIN{header=""; $body=""} { if(NR==1){header=$0}else{body=body"\n"$0}} END{print header; print body|"sort -nk3"}'
fuente