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
______________________________________________________________________