sort -u com -c, o que isso faz?

2

A página man da opção sort -u diz:

with -c, check for strict ordering; without -c, output only the first of an equal run

Alguém pode traduzir isso para o inglês básico para mim? A opção -uc me dá a mesma saída que apenas -c .

    
por Lumify 20.10.2017 / 11:01

3 respostas

3

Ordenação rigorosa significa que nenhum valor pode ser repetido. Compare a saída de

printf "%s\n" 1 2 3 4 4 | sort -uc

com o de

printf "%s\n" 1 2 3 4 4 | sort -c
    
por 20.10.2017 / 11:08
2

A opção -c para sort faz com que sort verifique se os dados de entrada estão classificados corretamente, considerando outras opções. Não realizará nenhuma classificação. Em algumas implementações de sort , -c pode ser escrito --check .

Portanto, sort -u -c executaria uma verificação nos dados e informaria se os dados estão classificados e contêm entradas duplicadas. Se estiver classificado e não contiver entradas duplicadas, ele não dirá nada, mas se houver entradas duplicadas ou se os dados não forem classificados, ele produzirá uma mensagem de diagnóstico e sairá com um status de saída diferente de zero.

Você pode usar isso da seguinte maneira:

if sort -uC file; then
   echo 'file is sorted and contains no duplicate entries'
else
   echo 'file is unsorted or contains duplicate entries'
fi

A opção -C faz o mesmo que -c , mas impede que sort produza qualquer saída. -C às vezes pode ser escrito --check=quiet ou --check=silent .

    
por 20.10.2017 / 11:12
1

Aqui está como o manual de classificação estendida ( info coreutils 'sort invocation' ) explica:

‘--unique’

Normally, output only the first of a sequence of lines that compare equal. For the --check (-c or -C) option, check that no pair of consecutive lines compares equal.

Ou seja. combinar -c (check) com -u (unique) irá, logicamente, verificar se não há duplicatas na entrada.

Por exemplo:

%echo -e "a\na\nb\nc"| sort -c && echo OK
OK

%echo -e "a\na\nb\nc"| sort -uc && echo OK
sort: -:2: disorder: a

Enquanto a entrada estiver classificada (a- > a- > b- > c), haverá duplicatas, portanto, -uc falhará.

    
por 20.10.2017 / 11:13

Tags