-n- dá a classificação numérica. Adicionado desde que você o adicionou em sua tentativa. Se o seu campo de usuário for somente texto, você não precisará dele.
-k3- define o campo (chave). o usuário é o terceiro campo.
Como posso usar classificar 2 colunas? por exemplo, quero classificar pela coluna 6 primeiro e classificar pela coluna 3 segundo.
user2452340
1
Isso não funcionará se houver strings entre aspas contendo vírgulas no CSV (a menos que a coluna pela qual você deseja classificar seja anterior à coluna que contém vírgulas). Você pode ter que fazer uma passagem primeiro com awk (usando FPAT = "[^,] * | \" [^ \ "] * \" "e OFS =" | "ou algum outro delimitador que você possa usar com classificação)
davemyron
1
@ user2452340 Você pode fazer isso: sort -t, -nk3 filename.csv | sort -t, -nk6- primeiro ele classificará pela coluna 3, em seguida, classificará pela coluna 6 para que a coluna 6 seja classificada corretamente em todo o caminho e para quaisquer linhas em que a coluna 6 seja igual, elas serão classificadas pela coluna 3 .
Mateus
3
@Matthew sort -t ',' -k3,3n -k6,6nficará melhor. -k3usará a coluna 3 e o resto da linha.
Kusalananda
1
Eu só precisava do -t, para dividir meu arquivo de 2 colunas dividido por vírgulas, obrigado jaypal
Ricardo Rivera Nieves
22
Use awk para colocar o ID do usuário na frente.
Ordenar
Use sed para remover o ID do usuário duplicado, supondo que os IDs do usuário não contenham nenhum espaço.
Isso é muito útil, especialmente se você precisar analisar ou combinar colunas para adicionar um campo de classificação e, em seguida, reter apenas a linha original. Usei awk / split para analisar / combinar campos de data e hora para uma classificação e, em seguida, remover.
skytaker
1
sortjá sabe como classificar por uma coluna específica, mas essa técnica - conhecida como transformação de Schwartzian - é útil quando o campo que você deseja classificar não é trivialmente uma coluna bem definida.
tripleee
11
Você pode escolher um delimitador, neste caso eu escolhi dois pontos e imprimi a coluna número um, ordenando por ordem alfabética:
sort -t, -k3 file
Respostas:
Que tal apenas
sort
.Onde
-t,
- define seu delimitador como,
.-n
- dá a classificação numérica. Adicionado desde que você o adicionou em sua tentativa. Se o seu campo de usuário for somente texto, você não precisará dele.-k3
- define o campo (chave). o usuário é o terceiro campo.fonte
sort -t, -nk3 filename.csv | sort -t, -nk6
- primeiro ele classificará pela coluna 3, em seguida, classificará pela coluna 6 para que a coluna 6 seja classificada corretamente em todo o caminho e para quaisquer linhas em que a coluna 6 seja igual, elas serão classificadas pela coluna 3 .sort -t ',' -k3,3n -k6,6n
ficará melhor.-k3
usará a coluna 3 e o resto da linha.Use sed para remover o ID do usuário duplicado, supondo que os IDs do usuário não contenham nenhum espaço.
fonte
sort
já sabe como classificar por uma coluna específica, mas essa técnica - conhecida como transformação de Schwartzian - é útil quando o campo que você deseja classificar não é trivialmente uma coluna bem definida.Você pode escolher um delimitador, neste caso eu escolhi dois pontos e imprimi a coluna número um, ordenando por ordem alfabética:
fonte
e por ordem inversa
fonte
tente isso -
OU
fonte
Isso deve funcionar
fonte
Para excluir a primeira linha (cabeçalho) da classificação, divido-a em dois buffers.
fonte