De para de coluna do arquivo

13. Re: De para de coluna do arquivo

Felipe Duran de Aquino
Felipe09

(usa Outra)

Enviado em 05/04/2021 - 12:46h


msoliver escreveu:

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
______________________________________________________________________
Boa tarde.

A extenção é txt, está compactado gz.









  


14. Re: De para de coluna do arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 05/04/2021 - 18:25h

Boa noite Felipe,
Dá para enviar algumas linhas do arquivo,
Para que eu faça os testes finais....


#----------------------------------------------------#
Editado em 07-04-2021 sa 18:20
Abandonou o tópico?

#----------------------------------------------------#

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





01 02