sort Descobre quantos valores distintos estão entre a coluna certa

0

Por exemplo, este é o list.txt

Joe 3
Jack 1
Ulysses 6
Fox 2
Cassidy 1
Jones 6
Kevin 7

Em seguida, a saída deve ser 5 porque existem 5 valores diferentes na 2ª coluna.

Como devo terminar isso usando apenas sort cut wc uniq ?

Eu tenho uma idéia, primeiro use sort -k2n para ordenar a segunda coluna em ordem crescente e então use uniq para eliminar as linhas duplicadas da segunda coluna, e então o resultado seria como

Cassidy 1
Fox 2
Joe 3
Jones 6
Kevin 7

e depois eu uso cut -d ' ' -f2 para listar todos os números como 1 2 3 6 7 e então eu uso wc -d para contar o número de valores distintos e isso retornará 5 .

O que devo fazer na parte uniq para eliminar as linhas duplicadas com o mesmo número?

Existe uma maneira simples de conseguir isso?

    
por Ulysses 31.01.2018 / 20:55

3 respostas

0

Gostaria de começar com cut , já que você só se preocupa com a exclusividade na coluna 2:

cut -d' ' list.txt

resulta em:

1
2
1
3
6
7
6

Agora você quer valores únicos; O uniq fará isso, mas apenas se estiver ordenado. Se você vai classificar, vá em frente e use o sinalizador -u da classificação:

cut -d' ' -f2 list.txt | sort -u

Resultados em:

1
2
3
6
7

e agora você pode usar wc para contar o número de linhas de saída:

cut -d' ' -f2 list.txt | sort -u  | wc -l

que te dá:

5

Note que estamos contando com um formato específico para o arquivo list.txt - sem espaços nos nomes das pessoas!

    
por 31.01.2018 / 21:09
1

Eu iria com:

sort -k2,2 -u names | wc -l
5

Onde names tem este conteúdo:

cat names
Joe 3
Jack 1
Ulysses 6
Fox 2
Cassidy 1
Jones 6
Kevin 7
    
por 31.01.2018 / 21:13
0

Como você é obrigado a usar -sort -cut -wc -uniq , parece que a linha de comando necessária deve ser algo assim:

$ cut -d' ' -f2 file.txt | sort -n | uniq | wc -l
5
    
por 31.01.2018 / 22:21

Tags