Para atribuir uma variável de um arquivo separado por um delimitador

2

Eu tenho um arquivo de texto com os dados abaixo, separados por delimitador:

1000:Tom:user1
1002:Jerry:user2
1003:Victor:user3
1004:Jason:user4

Eu preciso executar um loop while (qualquer loop) para buscar detalhes da primeira linha e atribuir a variável conforme abaixo:

uid:1000
username:Tom
userid:user1

Eu sei que podemos usar o awk, mas eu não sou muito especialista em usar o awk e não consegui encontrar muita resolução. Se houver outra maneira de fazer isso, por favor, compartilhe isso comigo. Este script deve ser capaz de coletar detalhes até o final do arquivo "data". Eu posso fazer essa parte uma vez que eu seja capaz de fazer pela primeira linha.

    
por Venom 17.01.2014 / 13:24

3 respostas

5

Se você não quiser usar awk , pode fazer algo como

while IFS=: read -r uid username userid; do
  printf "user:%s\nusername:%s\nuserid:%s\n" "$uid" "$username" "$userid"; 
done <file 
user:1000
username:Tom
userid:user1
user:1002
username:Jerry
userid:user2
user:1003
username:Victor
userid:user3
user:1004
username:Jason
userid:user4

IFS é o separador de registro de entrada, definindo-o como : você pode ler diretamente as variáveis do arquivo.

    
por 17.01.2014 / 13:54
3

Veja o script awk abaixo:

user@host:~# awk -F: '{printf "uid:%s\nusername:%s\nuserid:%s\n", $1,$2,$3}' file
uid:1000
username:Tom
userid:user1
uid:1002
username:Jerry
userid:user2
uid:1003
username:Victor
userid:user3
uid:1004
username:Jason
userid:user4
    
por 17.01.2014 / 13:40
1
for i in 'cat text_file';do uid='echo "$i"|cut -d: -f1'; username='echo "$i"|cut -d: -f2'; userid='echo "$i"|cut -d: -f3'; echo "uid=$uid,username=$username,userid=$userid";done

uid=1000,username=Tom,userid=user1
uid=1002,username=Jerry,userid=user2
uid=1003,username=Victor,userid=user3
uid=1004,username=Jason,userid=user4

Então você tem as variáveis $uid , $username , $userid para usar.

Isso é bom?

    
por 17.01.2014 / 13:40