1) converta seus espaços em aba pelo comando unexpand
(considere que cada 8 espaços seja uma aba)
2) use a classificação com TAB
delimiter desta maneira:
TAB='echo -e "\t"'
sort -t"$TAB" YOUR_FILE
Como posso ignorar o espaço em "Kuala Lumpur" ao classificar esta lista? Eu trapaceei as tabulações e classifiquei na guia que me dá os resultados certos, mas eu gostaria de saber como lidar com um espaço em uma coluna porque reformatar uma lista não parece ser um bom hábito para entrar , especialmente se a lista for muito maior.
Obrigado antecipadamente
Kuala Lumpur 78 56
Seoul 86 66
Karachi 95 75
Tokyo 85 60
Lahore 85 75
Manila 90 85
POR CIDADE:
Karachi 95 75
Kuala Lumpur 78 56
Lahore 85 75
Manila 90 85
Seoul 86 66
Tokyo 85 60
Eu também classifico por alta temperatura (alta-baixa, segunda coluna) e baixa temperatura (baixa-alta, terceira col)
POR ALTA TEMPERATURA:
Karachi 95 75
Manila 90 85
Seoul 86 66
Lahore 85 75
Tokyo 85 60
Kuala Lumpur 78 56
POR BAIXA TEMPERATURA:
Kuala Lumpur 78 56
Tokyo 85 60
Seoul 86 66
Karachi 95 75
Lahore 85 75
Manila 90 85
1) converta seus espaços em aba pelo comando unexpand
(considere que cada 8 espaços seja uma aba)
2) use a classificação com TAB
delimiter desta maneira:
TAB='echo -e "\t"'
sort -t"$TAB" YOUR_FILE
Nota: - Sua pergunta é alterada duas vezes, mas não posso alterar a resposta várias vezes, mas desejo informar que a resposta permanecerá igual, basta classificar o número da coluna usando -k2
, em que 2 é coluna, então você vai ter resposta correta.
Apenas usei sort + sed
POR CIDADE
sort -k1 input_data | sed '/^$/d; s/$/\n/'
POR ALTA TEMPERATURA:
sort -k2 -nr data | sed '/^$/d; s/$/\n/'
POR BAIXA TEMPERATURA:
sort -k4 -nr data | sed '/^$/d; s/$/\n/'
Explicação:
dados classificados serão enviados para o sed
o sed irá excluir a primeira linha em branco usando /^$/d
em seguida, acrescente uma nova linha após cada linha.
Você tem duas opções.
Crie uma nova coluna de nome classificável com os espaços removidos, classifique por essa coluna temporária / nova e, finalmente, suprima a saída dessa coluna "temporária" ou
Verifique se o separador de campos não é um caractere válido em nenhum campo. Um Espaço é um caractere válido no Nome da Cidade, então você tem que usar outra coisa para o separador de campos.
A opção 1 permite um maior controle, pois você pode substituir os nomes por outros nomes, por exemplo, todos os minúsculos, números removidos, converter caracteres para outros caracteres e assim por diante, mas também o mais complexo de implementar.
A opção 2 pode ser feita assim:
#!/bin/bash
awk '{TLOW=$(NF-1);
THIGH=$NF;
$NF="";
$(NF-1)="";
gsub(" +$","");
CITYNM=$0;
printf ("%s:%s:%s\n", CITYNM, TLOW, THIGH)}' | sort -t:
Agora, a questão é como você deseja classificar um nome como "Cape Town" versus "Capelle". O comando unix sort coloca Capelle antes da Cidade do Cabo, mas isso pode às vezes não ser o que você quer, o que é quando a opção 1 entra em jogo.