De para de coluna do arquivo

1. De para de coluna do arquivo

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 30/03/2021 - 16:46h

Oi pessoal tudo bem?

Estou precisando de apoio com relação a construção de um de para via shell script

Hoje eu recebo o arquivo com o campo rating_group assim:

OUTROS
WHATSAPP_MSG
ESTACIO
FACEBOOK
Porem presiso que ele fique assim:

101
301
305
302
O de para seria:

101 = OUTROS
301 = WHATSAPP_MSG
305 = ESTACIO
302 = FACEBOOK

Alguém tem uma ideia de como consigo fazer via script?






  


2. Re: De para de coluna do arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/03/2021 - 17:36h

Felipe09 escreveu:

Oi pessoal tudo bem?

Estou precisando de apoio com relação a construção de um de para via shell script

Hoje eu recebo o arquivo com o campo rating_group assim:

OUTROS
WHATSAPP_MSG
ESTACIO
FACEBOOK
Porem presiso que ele fique assim:

101
301
305
302
O de para seria:

101 = OUTROS
301 = WHATSAPP_MSG
305 = ESTACIO
302 = FACEBOOK

Alguém tem uma ideia de como consigo fazer via script?

Boa tarde Felipe,
Tem várias opções .....
bash puro,
awk e sed.
Visto que, tanto no bash quanto no awk, teriamos que fazer um teste condicional para cada "termo",
Vamos de sed.

cat texto.txt
OUTROS
WHATSAPP_MSG
ESTACIO
FACEBOOK
sed '/OUTROS/s/^/101 = /;/WHATSAPP_MSG/s/^/301 = /;/ESTACIO/s/^/305 = /;/FACEBOOK/s/^/302 = /' texto.txt 

Caso queira "encurtar" o comando, use variáveis.
Exemplo:
var1="OUTROS";
var2="WHATSAPP_MSG";
var3="ESTACIO";
var4="FACEBOOK";
sed "/$var1/s/^/101 = /;/$var2/s/^/301 = /;/$var3/s/^/305 = /;/$var4/s/^/302 = /" texto.txt 

É isso...


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________



3. Re: De para de coluna do arquivo

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 30/03/2021 - 19:58h


v se te ajuda
mauricio@phantom ~/Temp $ cat a.txt 
mau
ri
cio
dez
mauricio@phantom ~/Temp $ cat b.txt
10
20
30
40
mauricio@phantom ~/Temp $ paste -d "=" a.txt b.txt
mau=10
ri=20
cio=30
dez=40
mauricio@phantom ~/Temp $


------------------------------------------------------| Linux User #621728 |------------------------------------------------------

" Nem sempre é amigo aquele que te tira do buraco !!! ( Saddam Hussein )"

------------------------------------------------------| Linux User #621728 |------------------------------------------------------




4. Re: De para de coluna do arquivo

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 30/03/2021 - 20:19h


msoliver escreveu:

Felipe09 escreveu:

Oi pessoal tudo bem?

Estou precisando de apoio com relação a construção de um de para via shell script

Hoje eu recebo o arquivo com o campo rating_group assim:

OUTROS
WHATSAPP_MSG
ESTACIO
FACEBOOK
Porem presiso que ele fique assim:

101
301
305
302
O de para seria:

101 = OUTROS
301 = WHATSAPP_MSG
305 = ESTACIO
302 = FACEBOOK

Alguém tem uma ideia de como consigo fazer via script?

Boa tarde Felipe,
Tem várias opções .....
bash puro,
awk e sed.
Visto que, tanto no bash quanto no awk, teriamos que fazer um teste condicional para cada "termo",
Vamos de sed.

cat texto.txt
OUTROS
WHATSAPP_MSG
ESTACIO
FACEBOOK
sed '/OUTROS/s/^/101 = /;/WHATSAPP_MSG/s/^/301 = /;/ESTACIO/s/^/305 = /;/FACEBOOK/s/^/302 = /' texto.txt 

Caso queira "encurtar" o comando, use variáveis.
Exemplo:
var1="OUTROS";
var2="WHATSAPP_MSG";
var3="ESTACIO";
var4="FACEBOOK";
sed "/$var1/s/^/101 = /;/$var2/s/^/301 = /;/$var3/s/^/305 = /;/$var4/s/^/302 = /" texto.txt 

É isso...


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________

Como Ficaria com awk?



5. Re: De para de coluna do arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/03/2021 - 21:49h

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________




6. Re: De para de coluna do arquivo

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 31/03/2021 - 09:46h


msoliver escreveu:

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Marcelo bom dia.

É possivel incrementar seu exemplo no awk abaixo na coluna $7?

awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}



7. Re: De para de coluna do arquivo

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 31/03/2021 - 12:25h


Felipe09 escreveu:


msoliver escreveu:

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Marcelo bom dia.

É possivel incrementar seu exemplo no awk abaixo na coluna $7?

awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}


Eu estou tentando assim:

cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'

mas retorna assim:

OUTROS 101
OUTROS 101
OUTROS 101
OUTROS 101

Eu gostaria que retorno seria assi:

101
101
101



8. Re: De para de coluna do arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 31/03/2021 - 17:17h


Felipe09 escreveu:


Felipe09 escreveu:


msoliver escreveu:

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Marcelo bom dia.

É possivel incrementar seu exemplo no awk abaixo na coluna $7?

awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}


Eu estou tentando assim:

cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'

mas retorna assim:

OUTROS 101
OUTROS 101
OUTROS 101
OUTROS 101


Eu gostaria que retorno seria assi:

101
101
101

-------------------------------------------------------------------------------------
Boa tarde Felipe.
A intenção do comando:
cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'
É, alterar o campo07 para "101", se o valor dele for = "OUTROS"?
É isso?
------------------------------------------------------------------------------------
Não endendi.....
awk -F ";" '{print $7 = "OUTROS", "101"}'
Vc ordena que print "OUTROS", mas, não quer que apareça "OUTROS".....
______________________________________________________________________
Quanto ao comando da postagem anterior:
awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}
Sim, é possivel.....


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________




9. Re: De para de coluna do arquivo

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 31/03/2021 - 17:48h


msoliver escreveu:


Felipe09 escreveu:


Felipe09 escreveu:


msoliver escreveu:

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Marcelo bom dia.

É possivel incrementar seu exemplo no awk abaixo na coluna $7?

awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}


Eu estou tentando assim:

cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'

mas retorna assim:

OUTROS 101
OUTROS 101
OUTROS 101
OUTROS 101


Eu gostaria que retorno seria assi:

101
101
101

-------------------------------------------------------------------------------------
Boa tarde Felipe.
A intenção do comando:
cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'
É, alterar o campo07 para "101", se o valor dele for = "OUTROS"?
É isso?
------------------------------------------------------------------------------------
Não endendi.....
awk -F ";" '{print $7 = "OUTROS", "101"}'
Vc ordena que print "OUTROS", mas, não quer que apareça "OUTROS".....
______________________________________________________________________
Quanto ao comando da postagem anterior:
awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}
Sim, é possivel.....


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



Oi Marcelo,

Sim é para alterar de outros para 101.

Deixa eu te contextualizar:

Recebo diariamente um arquivo este arquivo tem 11 colunas eu preciso de um de para para a coluna 7 onde OUTROS =: 101, WHATSAPP_MSG := 301, FACEBOOK =: 302, TWITTER_PINTEREST =: 706

Eu até tentei o sed não deu certo

Um colega sugeriu o IF dentro do AWK mas não sei a sintax




10. Re: De para de coluna do arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 31/03/2021 - 19:37h


Felipe09 escreveu:


msoliver escreveu:


Felipe09 escreveu:


Felipe09 escreveu:


msoliver escreveu:

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Marcelo bom dia.

É possivel incrementar seu exemplo no awk abaixo na coluna $7?

awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}


Eu estou tentando assim:

cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'

mas retorna assim:

OUTROS 101
OUTROS 101
OUTROS 101
OUTROS 101


Eu gostaria que retorno seria assi:

101
101
101

-------------------------------------------------------------------------------------
Boa tarde Felipe.
A intenção do comando:
cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'
É, alterar o campo07 para "101", se o valor dele for = "OUTROS"?
É isso?
------------------------------------------------------------------------------------
Não endendi.....
awk -F ";" '{print $7 = "OUTROS", "101"}'
Vc ordena que print "OUTROS", mas, não quer que apareça "OUTROS".....
______________________________________________________________________
Quanto ao comando da postagem anterior:
awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}
Sim, é possivel.....


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



Oi Marcelo,

Sim é para alterar de outros para 101.

Deixa eu te contextualizar:
Recebo diariamente um arquivo este arquivo tem 11 colunas,
preciso de um "de para" "para a coluna 7",
onde:
OUTROS =: 101,
WHATSAPP_MSG := 301,
FACEBOOK =: 302,
TWITTER_PINTEREST =: 706

Eu até tentei o sed não deu certo

Um colega sugeriu o IF dentro do AWK mas não sei a sintax

Eu sugeri o awk+condicional, e postei um exemplo:
awk '{if(condição) var="A";else if(condição) var="B";else if(condição) var="C";else if(condição) var="D"} {print var, $0}' TEXTO.txt
É só alterar:
"condição" e "var" para a sua "real situação", que é:
OUTROS =: 101,
WHATSAPP_MSG := 301,
FACEBOOK =: 302,
TWITTER_PINTEREST =: 706
Se $7 == "OUTROS"....
Se $7 == "WHATSAPP_MSG".......
--------------------------------------------------------------------------
Eu até tentei o sed não deu certo
Deu erro?
Qual erro?
Observando o comando sed que sugeri, notei que "repeti" as strings "OUTROS, WHATSAPP, etc"....
Mas, parece que deseja somente o "número", nesse caso:
sed 's/OUTROS/101/;s/WHATSAPP_MSG/301/;s/ESTACIO/305/;s/FACEBOOK/302/' texto
--------------------------------------------------------------------------
A minha intenção, é que vc aprenda..... :)

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________




11. Re: De para de coluna do arquivo

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 01/04/2021 - 10:27h


msoliver escreveu:


Felipe09 escreveu:


msoliver escreveu:


Felipe09 escreveu:


Felipe09 escreveu:


msoliver escreveu:

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Marcelo bom dia.

É possivel incrementar seu exemplo no awk abaixo na coluna $7?

awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}


Eu estou tentando assim:

cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'

mas retorna assim:

OUTROS 101
OUTROS 101
OUTROS 101
OUTROS 101


Eu gostaria que retorno seria assi:

101
101
101

-------------------------------------------------------------------------------------
Boa tarde Felipe.
A intenção do comando:
cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'
É, alterar o campo07 para "101", se o valor dele for = "OUTROS"?
É isso?
------------------------------------------------------------------------------------
Não endendi.....
awk -F ";" '{print $7 = "OUTROS", "101"}'
Vc ordena que print "OUTROS", mas, não quer que apareça "OUTROS".....
______________________________________________________________________
Quanto ao comando da postagem anterior:
awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}
Sim, é possivel.....


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



Oi Marcelo,

Sim é para alterar de outros para 101.

Deixa eu te contextualizar:
Recebo diariamente um arquivo este arquivo tem 11 colunas,
preciso de um "de para" "para a coluna 7",
onde:
OUTROS =: 101,
WHATSAPP_MSG := 301,
FACEBOOK =: 302,
TWITTER_PINTEREST =: 706

Eu até tentei o sed não deu certo

Um colega sugeriu o IF dentro do AWK mas não sei a sintax

Eu sugeri o awk+condicional, e postei um exemplo:
awk '{if(condição) var="A";else if(condição) var="B";else if(condição) var="C";else if(condição) var="D"} {print var, $0}' TEXTO.txt
É só alterar:
"condição" e "var" para a sua "real situação", que é:
OUTROS =: 101,
WHATSAPP_MSG := 301,
FACEBOOK =: 302,
TWITTER_PINTEREST =: 706
Se $7 == "OUTROS"....
Se $7 == "WHATSAPP_MSG".......
--------------------------------------------------------------------------
Eu até tentei o sed não deu certo
Deu erro?
Qual erro?
Observando o comando sed que sugeri, notei que "repeti" as strings "OUTROS, WHATSAPP, etc"....
Mas, parece que deseja somente o "número", nesse caso:
sed 's/OUTROS/101/;s/WHATSAPP_MSG/301/;s/ESTACIO/305/;s/FACEBOOK/302/' texto
--------------------------------------------------------------------------
A minha intenção, é que vc aprenda..... :)

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



Bom dia Marcelo tudo bem?

Muito obrigado, pela atenção realmente eu quero me aprofundar nisso.

Então trabalho na TIM faço parte da equipe de projetos de TI o arquivo em questão é uma entrega de BI para alimentar uma de nossas aplicações, o ETL em questão está paramentrizado para carregar algumas informações diferentes do data set entregue, (alguns problemas interno de conunicação) o fato é que ja estou debruçado nesta questão a 2 dias e realmente precisava da solução.

Já tenho um script nele eu altero o formato de data e ajusto uma string, mas para que seja 100% efetivo preciso alterar a coluna 7 de string pata number.

Desde já agradesço pelo apoio






#!/bin/ksh

###############################################################
#Name script: ajusta_arq_trafego_dados.sh #
##Autor: Felipe Duran de Aquino #
#Created: 30/03/21 #
#Licence: TIM BRASIL #
#Version: 1.0 #
#Objetivo: Ajustar o arquivo original no formato aceito no ETL#
###############################################################

#variaveis

data_aux=`date +%m/%y`
dir_in=/apps/data/faquino/arquivos_lab
dir_ori=/apps/data/faquino/arq_orig

#copia arquivos originais



#Descompacta

cd $dir_in

for des in trafego_dados*
do
gunzip ${des}
done

#Ajusta formato de data

cd $dir_in

#DIA;OPERADORA;TIPO_TRAFEGO;TIPO_ASSINANTE;TIPO_SERVICO;TIPO_TARIFACAO;RATING_GROUP;CLASSIFICA_TRAFEGO;DESCARTE_MEDIACAO;QUANTIDADE;VOLUME
#atual = 210327
#alterar para = 2021-03-27

for data in trafego_dados*
do
cat ${data} | awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7"";"$8";"$9";"$10";"$11}' 1${data}
rm ${data}
mv 1${data} ${data}
done

#Ajusta formato coluna "TIPO_ASSINANTE"

cd $dir_in

for T in trafego_dados*
do
cat ${T} | sed 's/_/-/g' > 1${T}
rm ${T}
mv 1${T} ${T}
done

#de para campo rating_group

#cd $dir_in

#for dp in trafego_dados*
#do
#cat ${dp} | sed 's/OUTROS/101/g';'s/WHATSAPP-MSG/301/g' > 1${dp}
#done

#compacta arquivo

cd $dir_in

for comp in trafego_dados*
do
gzip ${comp}
done
exit



12. Re: De para de coluna do arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/04/2021 - 20:54h

Felipe09 escreveu:


msoliver escreveu:


Felipe09 escreveu:


msoliver escreveu:


Felipe09 escreveu:


Felipe09 escreveu:


msoliver escreveu:

Felipe09 escreveu:
Como Ficaria com awk?

Como "disse" anteriormente:
um teste condicional para cada "termo".

Exemplo genérico:
awk '{if(condição1) var="A";else if(condição2) var="B";else if(condição3) var="C";else if(condição4) var="D"} {print var, $0}' TEXTO.txt


______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________


Marcelo bom dia.

É possivel incrementar seu exemplo no awk abaixo na coluna $7?

awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}


Eu estou tentando assim:

cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'

mas retorna assim:

OUTROS 101
OUTROS 101
OUTROS 101
OUTROS 101


Eu gostaria que retorno seria assi:

101
101
101

-------------------------------------------------------------------------------------
Boa tarde Felipe.
A intenção do comando:
cat trafego_dados_20210327_felipe_teste_10.txt | awk -F ";" '{print $7 = "OUTROS", "101"}'
É, alterar o campo07 para "101", se o valor dele for = "OUTROS"?
É isso?
------------------------------------------------------------------------------------
Não endendi.....
awk -F ";" '{print $7 = "OUTROS", "101"}'
Vc ordena que print "OUTROS", mas, não quer que apareça "OUTROS".....
______________________________________________________________________
Quanto ao comando da postagem anterior:
awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7";"$8";"$9";"$10";"$11}' > 1${data}
Sim, é possivel.....


______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



Oi Marcelo,

Sim é para alterar de outros para 101.

Deixa eu te contextualizar:
Recebo diariamente um arquivo este arquivo tem 11 colunas,
preciso de um "de para" "para a coluna 7",
onde:
OUTROS =: 101,
WHATSAPP_MSG := 301,
FACEBOOK =: 302,
TWITTER_PINTEREST =: 706

Eu até tentei o sed não deu certo

Um colega sugeriu o IF dentro do AWK mas não sei a sintax

Eu sugeri o awk+condicional, e postei um exemplo:
awk '{if(condição) var="A";else if(condição) var="B";else if(condição) var="C";else if(condição) var="D"} {print var, $0}' TEXTO.txt
É só alterar:
"condição" e "var" para a sua "real situação", que é:
OUTROS =: 101,
WHATSAPP_MSG := 301,
FACEBOOK =: 302,
TWITTER_PINTEREST =: 706
Se $7 == "OUTROS"....
Se $7 == "WHATSAPP_MSG".......
--------------------------------------------------------------------------
Eu até tentei o sed não deu certo
Deu erro?
Qual erro?
Observando o comando sed que sugeri, notei que "repeti" as strings "OUTROS, WHATSAPP, etc"....
Mas, parece que deseja somente o "número", nesse caso:
sed 's/OUTROS/101/;s/WHATSAPP_MSG/301/;s/ESTACIO/305/;s/FACEBOOK/302/' texto
--------------------------------------------------------------------------
A minha intenção, é que vc aprenda..... :)

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________



Bom dia Marcelo tudo bem?

Muito obrigado, pela atenção realmente eu quero me aprofundar nisso.

Então trabalho na TIM faço parte da equipe de projetos de TI o arquivo em questão é uma entrega de BI para alimentar uma de nossas aplicações, o ETL em questão está paramentrizado para carregar algumas informações diferentes do data set entregue, (alguns problemas interno de conunicação) o fato é que ja estou debruçado nesta questão a 2 dias e realmente precisava da solução.

Já tenho um script nele eu altero o formato de data e ajusto uma string, mas para que seja 100% efetivo preciso alterar a coluna 7 de string pata number.

Desde já agradesço pelo apoio
#!/bin/ksh

###############################################################
#Name script: ajusta_arq_trafego_dados.sh #
##Autor: Felipe Duran de Aquino #
#Created: 30/03/21 #
#Licence: TIM BRASIL #
#Version: 1.0 #
#Objetivo: Ajustar o arquivo original no formato aceito no ETL#
###############################################################

#variaveis

data_aux=`date +%m/%y`
dir_in=/apps/data/faquino/arquivos_lab
dir_ori=/apps/data/faquino/arq_orig

#copia arquivos originais???
#Descompacta
cd $dir_in

for des in trafego_dados*
do
gunzip ${des}
done

#Ajusta formato de data
cd $dir_in

#DIA;OPERADORA;TIPO_TRAFEGO;TIPO_ASSINANTE;TIPO_SERVICO;TIPO_TARIFACAO;RATING_GROUP;CLASSIFICA_TRAFEGO;DESCARTE_MEDIACAO;QUANTIDADE;VOLUME
#atual = 210327
#alterar para = 2021-03-27

for data in trafego_dados*
do
cat ${data} | awk -F ";" '{print "20" substr($1,1,2)"-" substr($1,3,2)"-" substr($1,5,2)";"$2";"$3";"$4";"$5";"$6";"$7"";"$8";"$9";"$10";"$11}' 1${data}
rm ${data}
mv 1${data} ${data}
done

#Ajusta formato coluna "TIPO_ASSINANTE"

cd $dir_in

for T in trafego_dados*
do
cat ${T} | sed 's/_/-/g' > 1${T}
rm ${T}
mv 1${T} ${T}
done

#de para campo rating_group

#cd $dir_in

#for dp in trafego_dados*
#do
#cat ${dp} | sed 's/OUTROS/101/g';'s/WHATSAPP-MSG/301/g' > 1${dp}
#done

#compacta arquivo

cd $dir_in
for comp in trafego_dados*
do
gzip ${comp}
done
exit

-----------------------------------------------------------------------------------------------------------------------
Felipe Boa noite,
Dei uma verificada no seu "script",
É possivel, "dar uma boa otimizada".
Reduzir os 5 laços atuais:
1º laço => descompacta
2º laço => altera formato da data de: yymmdd para: YYYY-mm-dd
3º laço => troca: '_' por: '-'
4º laço => troca: OUTROS,WHATSAPP-WEB,ESTACIO e FACEBOOK, por: 101,301,305 e 302, respectivamente.
5º laço = Compacta arquivo

Para um laço ...

Para isso, preciso de algumas linhas do arquivo......

Informações necessárias:
Qual a extensão do arquivo após a descompactação?
O arquivo inicial está compactado em ".gz", certo? #Importante
-------------------------------------------------------------------------------------------------
A lógica é:

cd ${dir_in};
#Descompacta todos arqs, fora do laço.
gunzip trafego_dados*.gz
wait;
for arq in *.extensão;do #Qual a extensão? txt, csv, etc
#faz todas alterações
Tudo em um AWK!
#Altera campo 1 data De: 210402 Para: 2021-04-02
#Altera campo 4 troca "_" por "-"
#Altera campo 7, De: OUTROS, WHATSAPP_MSG, ESTACIO, FACEBOOK Para: 101, 301, 305, 302
wait
#compacta novamente
done

Fico no aguardo....
______________________________________________________________________
Att.: Marcelo Oliver
______________________________________________________________________





01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts