Use 'cut' para extrair uma lista de / etc / passwd

3

Como eu poderia usar o comando cut para extrair uma lista de nomes de usuários e shells de login do arquivo /etc/passwd , onde os nomes de usuários e os shells de login resultantes são separados por um único espaço?

Classifique a lista resultante em ordem alfabética crescente, usando o shell de login como chave primária e o nome de usuário como uma chave secundária. Armazene o resultado no arquivo recém-criado ~/usershells.txt .

Este é o comando que eu tentei:

cut -d /etc/passwd -k7 -k1 | sort > ~/usershells.txt
    
por user72510 15.07.2014 / 23:31

4 respostas

2

cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 1 |sort -k 2

Eu não acho que o primeiro tipo seja estritamente necessário, já que é o tipo padrão.

Se você quiser mudar as colunas, simplesmente use o awk:

cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2 | awk '{print $2,$1}'

que sugere usar o awk para obter:

awk -F ":" '{print $7,$1}' /etc/passwd | sort

O que não está usando o corte, mas não tenho certeza do quanto é difícil usar um corte para você.

Se você não quiser usar o awk, ainda poderá alternar a ordem das colunas.
Aqui está um exemplo usando loop while e leia:

cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort -k 2 | while read -r c1 c2;do echo "$c2 $c1";done

Outra opção usando "cortar e colar":

paste <(cut -f7 -d: /etc/passwd) <(cut -f1 -d: /etc/passwd) | sort

ou, se o espaço único for uma exigência difícil:

paste -d " " <(cut -f7 -d: /etc/passwd) <(cut -f1 -d: /etc/passwd) | sort

simplesmente redireciona qualquer uma das opções listadas para um arquivo usando o > ~ / usershells.txt

é claro que você ainda pode usar o cut'n'paste para manter o pedido original e ainda classificar os shells:

paste -d " " <(cut -f1 -d: /etc/passwd) <(cut -f7 -d: /etc/passwd) | sort -k 2 > ~/usershells.txt
    
por 16.07.2014 / 00:20
1

Para classificar você não precisa usar cut , use apenas sort com piping :

sort -t " " -k 7 /etc/password |  sort -t " " -k 1

A ordem de tubulação garante que o shell de login será usado como chave primária e o nome de usuário como uma chave secundária.

-t " " usará space como separador.

Para mostrar apenas as duas colunas, use cut (após a classificação):

sort -t " " -k 7 /etc/password |  sort -t " " -k 1 | cut -f 1,7 -d:

e finalmente você pode salvar a saída no arquivo usershells.txt :

sort -t " " -k 7 /etc/password |  sort -t " " -k 1 | cut -f 1,7 -d: > ~/usershells.txt

e se o seu separador padrão for : , você poderá usar tr como Dani_l menciona:

tr ":" " " /etc/password |  sort -t " " -k 7| sort -t " " -k 1 | cut -f 1,7 -d: > ~/usershells.txt
    
por 15.07.2014 / 23:43
0

O parâmetro f permite selecionar o campo e d define qual é o caractere de separação

 cut -f 1,7 -d: /etc/passwd
    
por 15.07.2014 / 23:43
0
cut -f 1,7 -d: /etc/passwd | tr ":" " " | sort > ~/usershells.txt
    
por 16.07.2014 / 20:26