Classifica um arquivo de texto de acordo com um caractere dentro de um campo

1

Eu tenho um arquivo chamado: newfile , que consiste nos seguintes dados

1 AC BB CC
2 AB CC DD
3 CA BB CC
4 BE DD EE
5 BD AA AA

Eu digite o seguinte comando no bash para classificar os dados de acordo com o segundo caractere, segundo campo

sort -k3 newfile

Eu esperava os seguintes resultados

3 CA BB CC
2 AB CC DD
1 AC BB CC
5 BD AA AA
4 BE DD EE

Por que estou obtendo os seguintes resultados e como devo resolver de acordo com o terceiro caractere (ignorando o branco)

5 BD AA AA
1 AC BB CC
3 CA BB CC
2 AB CC DD
4 BE DD EE
    
por Computernerd 05.03.2014 / 08:30

2 respostas

7

Para classificar um caractere específico dentro de um campo (ou seja, um bloco de caractere cercado por caracteres em branco). Você pode usar esta sintaxe específica:

sort -k 1.4 file

Isso classificará o quarto caractere do arquivo. Consulte link para obter detalhes.

Se você tiver resultados contraintuitivos ao jogar com -k , adicione a opção -b . Isso fará com que sort ignore os espaços em branco. Então

sort -b -k 2.2 file

dá o que você quer: segundo caractere do segundo campo, ignorando espaços em branco.

    
por 05.03.2014 / 08:48
2

Terceiro campo significa terceiro campo quando separado por espaços (divisão padrão da palavra shell). Isso é exatamente o que você tem e o que alguém esperaria desse recurso (geralmente as pessoas ordenam tabelas, com palavras ou números arbitrariamente longos nos campos, essa é a primeira vez que vejo a classificação por caracteres simples). Se você quiser classificar por uma coluna de caracteres, é necessário dividi-la em caracteres, classificar e apertar. Se esses forem espaços, podemos colocar guias adicionais entre sed , classificar e remover as guias:

cat "newfile" | sed 's/./&\t/g' | sort -k3 | tr -d '\t'

Você também pode fornecer o nome do arquivo para sed diretamente, mas eu geralmente faço isso com um pipe porque talvez eu tenha que receber a entrada de outro script de qualquer maneira.

Se você já tiver espaços e guias em seu arquivo, terá que ser mais criativo para evitar a exclusão do espaço em branco original também.

    
por 05.03.2014 / 08:43