Preciso de ajuda para escrever um script que leia nomes de um arquivo

1

Meu arquivo tem 100 linhas. Eu tenho que percorrer todas as linhas e obter o nome completo dos atletas.

Cada formato de linha se parece com isso, mas com atletas diferentes:

vada359,Valerie Adams,Women,Athletics,AT,new-Zealand

Estou com dificuldades para criar um script que leia a linha e crie novos usuários com o comando useradd , mas só posso obter o nome completo.

Você pode me ajudar com ideias sobre como posso fazer isso?

    
por G_alvarez 12.09.2016 / 21:57

1 resposta

3

Como esta é praticamente uma questão de lição de casa, não vou dar uma resposta exata. No entanto, aqui estão algumas ideias que podem levar à solução.

Muitas ferramentas permitem dividir o texto em colunas ou "campos" em caracteres específicos. No seu caso, você deseja dividir o texto em vírgulas e extrair o campo # 2. Ferramentas como awk, permitem especificar o separador de campo com a opção -F e imprimir campos como $ 1, $ 2, $ 3, etc. cut como o Elder Geek mencionou, é outra ferramenta para esse trabalho e pode usar -d para campo delimitador e -fx para campos, em que x é um número inteiro.

Tendo extraído esses campos, você desejará passar cada um deles para useradd ou melhor adduser , que é um script Perl projetado especificamente para facilitar a adição de usuários ao sistema. Se você estiver enviando cada nome do comando anterior via pipe para adduser , talvez queira usar algo como

command1 | xargs adduser

No entanto, há um pequeno problema - você receberá uma string com nome e sobrenome separados por espaço. O nome de usuário típico do Unix é feito como uma única string, então eu recomendo que você envie o nome extraído por meio do comando tr -d ' ' , que exclui espaços. Dessa forma, você criará um usuário ValerieAdams, por exemplo. Dependendo de suas necessidades, isso pode ou não ser aceitável, portanto, revise os requisitos.

Além disso, como Kaz Wolfe apontou, as maiúsculas no nome de usuário não são permitidas por padrão no adduser, no entanto, é possível usar --force-badname flag como karthic87's answer

    
por Sergiy Kolodyazhnyy 13.09.2016 / 08:58