Eu tenho alguns comandos em um script awk que estou escrevendo:
print "Here are some players and their numbers, sorted by last name"
if(sum[x] > 500) {print x, $2}
Quais saídas:
Here are some players and their numbers, sorted by last name
Lebron James 23
Kevin Durant 35
Kobe Bryant 24
Blake Griffin 32
Dikembe Mutumbo 55
Como posso usar o sort
comando no meu script awk para classificar os jogadores e seus números SOMENTE?
command-line
text-processing
awk
KM142646
fonte
fonte
x
e definirPROCINFO["sorted_in"]
um valor criptográfico, em seguida, imprima a matriz. Eu não iria lá.... | sort -k2,2
....| sort -k2,2
se houver outras linhas que precisam ser impressas? Verifique a pergunta editada.echo
pressionar a linha de cabeçalho do shell, execute oawk | sort
pipeline.Respostas:
você pode adicionar
| sort -k2
ao seu comando. Isso será ordenado alfabeticamente com base na segunda coluna.Exemplo:
resulta em
fonte
{print x, $2}
diretamente no código do script? Estou recebendo um erro ao canalizarif(sum[x] > 500) {print x, $2} | sort -k2
.if(sum[x] > 500) {print x, $2}
é o código Awk enquanto| sort -k2
é um comando do shell. Obviamente, você não pode misturar os dois assim porque são idiomas diferentes. Em vez disso, você precisa aplicar osort
comando à saída do intérprete do Awk que executa seu snippet de código do Awk. Se você não sabe o que quero dizer, expanda sua pergunta para nos dar uma visão completa../my-script.sh | sort -k2
. 2. adicione `| ordene -k2 na linha do seu script que produz a saída fornecida na sua pergunta.Embora eu não o recomende (dada a relativa simplicidade de canalizar o resultado através de um
sort
comando externo ), você pode fazer isso pelo menos com versões recentes do GNU awk (pelo menos 4.0 IIRC), conforme descrito em Classificando valores e índices de matrizes com gawkVeja como você pode implementá-lo, supondo que você tenha os dados em uma matriz associativa na qual o índice está
Firstname Lastname
. Primeiro, você precisa definir uma função de comparação personalizada que divida o índice e depois comparar primeiroLastname
(como desempate) emFirstname
exemploAgora você pode usar o
PROCINFO["sorted_in"]
método de classificação de matriz mencionado nos comentários por @zwetsJuntar as peças
Teste:
Nas versões menor ou mais antiga do awk, sua melhor aposta pode ser armazenar os dados indexados
Lastname Firstname
, classificar com o convencionalasorti
, dividir e trocar os campos dos índices à medida que você percorre a matriz para imprimi-la:fonte
Para
sort
apenas pelo segundo campo separado por espaço em branco, use a chave-k2,2
:por padrão,
sort
faz a classificação lexicograficamente.Observe que, se você não mencionar o último campo da chave de classificação, ou seja, se você apenas o usar
-k2
, poderá não obter o resultado desejado, pois isso ocorrerá desort
acordo com todos os campos a partir do segundo.Verifique também
man sort
.fonte
Tentar
Onde myscript.awk contém comandos puramente awk.
Se o seu script atual for um shell, você terá várias opções, incluindo
./myscript.bash | sort -k2
Reescreva o código como uma função dentro do script
Em vez de
Faz
Mas note que você também pode aplicar a classificação à estrutura do ... done em vez de criar uma função.
fonte
Para classificar seus dados para impressão:
Suponha que você queira imprimir o 2º campo (separado por espaço em branco) use isto:
por exemplo:
Se você deseja imprimir o seu todo,
data.txt
mas classificado na coluna 2, então:Use esta lógica (s) em sua exigência.
Você pode usar
man sort
para recursos mais interessantes desort
.fonte
o que dizer abaixo:
funciona quando eu testei.
fonte
Para classificar a saída em um arquivo:
fonte