Ler o Primeiro nome e o Sobrenome de um nome composto [RESOLVIDO]

1. Ler o Primeiro nome e o Sobrenome de um nome composto [RESOLVIDO]

Gabriel Gonçalves
gabrielgr987

(usa Ubuntu)

Enviado em 14/06/2018 - 11:01h

Olá pessoal, estou com uma dúvida com um script. Tenho que ler de um arquivo .txt com alguns nomes, para poder gravar no banco de dados. Estou utilizando o seguinte comando para poder acrescentar pontos em um nome composto ("JOSE MARIA COSTA" se torna "JOSE.MARIA.COSTA"):

cat arquivo.txt | sed "s, ,.,g;s/$//" > nomes.txt

Mas, preciso ler só o primeiro e o segundo nome somente, deixa como "JOSE.MARIA", por exemplo.

Existe alguma forma de ler apenas o primeiro e segundo nome? Ou remover o terceiro nome?

Att,


  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 14/06/2018 - 11:51h

gabrielgr987 escreveu:

Olá pessoal, estou com uma dúvida com um script. Tenho que ler de um arquivo .txt com alguns nomes, para poder gravar no banco de dados. Estou utilizando o seguinte comando para poder acrescentar pontos em um nome composto ("JOSE MARIA COSTA" se torna "JOSE.MARIA.COSTA"):

cat arquivo.txt | sed "s, ,.,g;s/$//" > nomes.txt

Mas, preciso ler só o primeiro e o segundo nome somente, deixa como "JOSE.MARIA", por exemplo.

Existe alguma forma de ler apenas o primeiro e segundo nome? Ou remover o terceiro nome?

Att,

Bom dia Gabriel.
Se o arquivo.txt tem somente os nomes, use o awk.
cat arquivo.txt
JOSE MARIA COSTA
MARIA JOSE Silva
CARLOS MANUEL GOMES

awk '{ print $1,$2}' arquivo.txt
Saída:
JOSE MARIA
MARIA JOSE
CARLOS MANUEL

Se quer que os campos fiquem separados por ".", faça:
awk '{OFS="."; print $1,$2}' arquivo.txt 
JOSE.MARIA
MARIA.JOSE
CARLOS.MANUEL

Para colocar as letras inicias em maiúscula, faça:
sed 's/.*/\L&/;s/^.\| ./\U&/g' arquivo.txt 
Jose Maria Costa
Maria Jose Silva
Carlos Manuel Gomes


Att.:
Marcelo Oliver


3. Re: Ler o Primeiro nome e o Sobrenome de um nome composto [RESOLVIDO]

Dayane Carmo
seligananny

(usa Manjaro Linux)

Enviado em 14/06/2018 - 16:19h

echo "JOSE MARIA COSTA" | awk {'print $1"."$2'}

cat arquivo_nomes.txt | awk {'print $1"."$2'}


4. Re: Ler o Primeiro nome e o Sobrenome de um nome composto [RESOLVIDO]

meianoite
meianoite

(usa Nenhuma)

Enviado em 14/06/2018 - 18:26h

msoliver escreveu:

gabrielgr987 escreveu:

Olá pessoal, estou com uma dúvida com um script. Tenho que ler de um arquivo .txt com alguns nomes, para poder gravar no banco de dados. Estou utilizando o seguinte comando para poder acrescentar pontos em um nome composto ("JOSE MARIA COSTA" se torna "JOSE.MARIA.COSTA"):

cat arquivo.txt | sed "s, ,.,g;s/$//" > nomes.txt

Mas, preciso ler só o primeiro e o segundo nome somente, deixa como "JOSE.MARIA", por exemplo.

Existe alguma forma de ler apenas o primeiro e segundo nome? Ou remover o terceiro nome?

Att,

Bom dia Gabriel.
Se o arquivo.txt tem somente os nomes, use o awk.
cat arquivo.txt
JOSE MARIA COSTA
MARIA JOSE Silva
CARLOS MANUEL GOMES

awk '{ print $1,$2}' arquivo.txt
Saída:
JOSE MARIA
MARIA JOSE
CARLOS MANUEL

Se quer que os campos fiquem separados por ".", faça:
awk '{OFS="."; print $1,$2}' arquivo.txt 
JOSE.MARIA
MARIA.JOSE
CARLOS.MANUEL

Para colocar as letras inicias em maiúscula, faça:
sed 's/.*/\L&/;s/^.\| ./\U&/g' arquivo.txt 
Jose Maria Costa
Maria Jose Silva
Carlos Manuel Gomes


Att.:
Marcelo Oliver




Será que é algo relacionado com AD.






5. Deu certo, mas estou com uma dúvida...

Gabriel Gonçalves
gabrielgr987

(usa Ubuntu)

Enviado em 14/06/2018 - 23:44h

Fiz um esquema aqui para conseguir ler:

awk {'print $1"\t"$2"."$3"\t"$2, $3, $4, $5, $6, $7} alunos.txt > arquivo.txt

Aí quero saber, tem como reduzir essa "gambiarra" que eu fiz? Para no caso de ler um nome grande?


o arquivo.txt ficou assim:
18215 DOUGLAS.SILVA DOUGLAS SILVA DE OLIVEIRA
18107 ELIANE.CORDEIRO ELIANE CORDEIRO DE LIMA
18068 ELIEL.RIBEIRO ELIEL RIBEIRO DOS SANTOS DE ANDRADE
18360 FERNANDA.GOMES FERNANDA GOMES DE ARAUJO
17220 FILIPE.SANTOS FILIPE SANTOS ROCHA
18126 GABRIEL.GUSTAVO GABRIEL GUSTAVO ARAUJO TINOCO


O que estou tentando fazer é cadastrar usuários em massa pelo MySQL, para utilização do FTP, estou utilizando esse script para ler o "arquivo.txt" e cadastrar no banco:

#!/bin/bash
IFS=$(echo -e "\t")
while read urm user nome;do
mysql -u root -p123 -e \
"INSERT INTO ftpuser(userid, passwd, username, userrm, useremail, pergunta, resposta, uid, gid, homedir) VALUES('$user','$urm', '$nome', $urm, 'a@a','a', 'a', 1006, 1006, '/home/ETEC')" proftpd;
[ "$?" = "0" ] && echo "Operação OK" || echo "Operação: ERRO"
done < $1



6. Re: Ler o Primeiro nome e o Sobrenome de um nome composto

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 15/06/2018 - 11:34h

gabrielgr987 escreveu:

Fiz um esquema aqui para conseguir ler:

awk {'print $1"\t"$2"."$3"\t"$2, $3, $4, $5, $6, $7} alunos.txt > arquivo.txt

Aí quero saber, tem como reduzir essa "gambiarra" que eu fiz? Para no caso de ler um nome grande?


o arquivo.txt ficou assim:
18215 DOUGLAS.SILVA DOUGLAS SILVA DE OLIVEIRA
18107 ELIANE.CORDEIRO ELIANE CORDEIRO DE LIMA
18068 ELIEL.RIBEIRO ELIEL RIBEIRO DOS SANTOS DE ANDRADE
18360 FERNANDA.GOMES FERNANDA GOMES DE ARAUJO
17220 FILIPE.SANTOS FILIPE SANTOS ROCHA
18126 GABRIEL.GUSTAVO GABRIEL GUSTAVO ARAUJO TINOCO


O que estou tentando fazer é cadastrar usuários em massa pelo MySQL, para utilização do FTP, estou utilizando esse script para ler o "arquivo.txt" e cadastrar no banco:

#!/bin/bash
IFS=$(echo -e "\t")
while read urm user nome;do
mysql -u root -p123 -e \
"INSERT INTO ftpuser(userid, passwd, username, userrm, useremail, pergunta, resposta, uid, gid, homedir) VALUES('$user','$urm', '$nome', $urm, 'a@a','a', 'a', 1006, 1006, '/home/ETEC')" proftpd;
[ "$?" = "0" ] && echo "Operação OK" || echo "Operação: ERRO"
done < $1


Bom dia Gabriel.
Vejo que não é necessário gerar o arquivo.txt com o "awk", comando abaixo:
awk {'print $1"\t"$2"."$3"\t"$2, $3, $4, $5, $6, $7} alunos.txt > arquivo.txt

Faça o "laço" em alunos.txt, gere um array e "pegue" só o necessário.
Exemplo:
while read line;do 
read -a CP <<< "$line";
echo "${CP[0]} ${CP[1]} ${CP[2]}"; #Aqui tem todos campos da linha, "peguei" só os três primeiros...
#COMANDOS PARA INSERIR NA TABELA
done<alunos.txt


att.:
marcelo oliver



7. Re: Ler o Primeiro nome e o Sobrenome de um nome composto [RESOLVIDO]

Gabriel Gonçalves
gabrielgr987

(usa Ubuntu)

Enviado em 16/06/2018 - 17:48h

msoliver escreveu:

while read line;do 
read -a CP <<< "$line";
echo "${CP[0]} ${CP[1]} ${CP[2]}"; #Aqui tem todos campos da linha, "peguei" só os três primeiros...
#COMANDOS PARA INSERIR NA TABELA
done<alunos.txt

att.:
marcelo oliver


essa solução é muito melhor, só que preciso colocar o ponto entre os nomes e uma tabulação, tem como deixar como o exemplo abaixo?

Antes:
12345 LUCAS RAMOS

Depois:
12345 LUCAS.RAMOS LUCAS RAMOS

Pensei nisso, mas não funcionou:

echo "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}"

O ponto deu certo, mas o "\t" saiu como se fosse um texto.


8. Re: Ler o Primeiro nome e o Sobrenome de um nome composto

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 16/06/2018 - 21:05h

gabrielgr987 escreveu:

msoliver escreveu:

while read line;do 
read -a CP <<< "$line";
echo "${CP[0]} ${CP[1]} ${CP[2]}"; #Aqui tem todos campos da linha, "peguei" só os três primeiros...
#COMANDOS PARA INSERIR NA TABELA
done<alunos.txt

att.:
marcelo oliver


essa solução é muito melhor, só que preciso colocar o ponto entre os nomes e uma tabulação, tem como deixar como o exemplo abaixo?

Antes:
12345 LUCAS RAMOS

Depois:
12345 LUCAS.RAMOS LUCAS RAMOS

Pensei nisso, mas não funcionou:

echo "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}"

O ponto deu certo, mas o "\t" saiu como se fosse um texto.


Boa noite.
Para que a tabulação seja interpretada, use "echo -e":
echo -e "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}"

Ou
printf "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}\n"


Att.:
Marcelo Oliver



9. Resolvido

Gabriel Gonçalves
gabrielgr987

(usa Ubuntu)

Enviado em 17/06/2018 - 11:52h

Esse daqui saiu tudo "grudado":
printf "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}\n"


Esse daqui está saindo com um "t" no meio:
echo -e "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}"


Consegui fazer com esse, colocando o "\t" dentro das aspas:
echo -e "${CP[0]}\t${CP[1]}"."${CP[2]}\t${CP[1]} ${CP[2]}"


Acho que meu problema foi solucionado, muito obrigado Marcelo, me ajudou muito mesmo, estava parado um tempão nessa parte :D
Acho que já posso marcar como resolvido...


10. Re: Ler o Primeiro nome e o Sobrenome de um nome composto [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 17/06/2018 - 13:32h

gabrielgr987 escreveu:

Esse daqui saiu tudo "grudado":
printf "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}\n"


Esse daqui está saindo com um "t" no meio:
echo -e "${CP[0]}"\t"${CP[1]}"."${CP[2]}"\t"${CP[1]} ${CP[2]}"


Consegui fazer com esse, colocando o "\t" dentro das aspas:
echo -e "${CP[0]}\t${CP[1]}"."${CP[2]}\t${CP[1]} ${CP[2]}"


Acho que meu problema foi solucionado, muito obrigado Marcelo, me ajudou muito mesmo, estava parado um tempão nessa parte :D
Acho que já posso marrcar como resolvido...


Bom que resolveu.
Marque como.o resolvudo para encerrar o tópico.
E, para que ambas as partes fiquem satisfeitas. ..
Marque minha resposta como A Melhor... rsrsrs
Abraço,
Marcelo






Patrocínio

Site hospedado pelo provedor HostGator.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Viva o Android

Tópicos

Top 10 do mês

Scripts