Como criar uma coluna a mais com texto provindo de processamento? [RESOLVIDO]

1. Como criar uma coluna a mais com texto provindo de processamento? [RESOLVIDO]

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 10/05/2016 - 15:31h

Oi Galera, possuo um arquivo de texto assim:










Administrator;2016-05-07;13:59:04;0;A4;Cancelled
Unknown;2016-05-09;08:43:38;1;A4;Completed
Unknown;2016-05-09;08:23:47;1;A4;Completed
Local_User;2016-05-09;08:48:52;1;A4;Completed
C225M523;2016-05-08;10:21:59;0;A4;Cancelled
C225M523;2016-05-08;10:18:28;0;A4;Cancelled
C33M607;2016-05-08;09:36:10;0;A4;Cancelled
casop-5213;2016-05-09;08:45:24;1;A4;Completed
casop-513;2016-05-09;08:42:49;1;A4;Completed
casop-513;2016-05-09;08:42:33;1;A4;Completed


A primeira Coluna é o nome de usuário e eu queria criar uma nova coluna no fim da linha ( o separador de campos é o caractere ; ) com o seguinte processamento:

Tomando como exemplo os nomes de usuário:


Administrator
Unknown
Local_User
C225M523
casop-513


Os 2 últimos ( C225M523 e casop-513 ) eu quero criar uma coluna no fim da linha que representa o departamento que o usuário trabalha e pra calcular segue a seguinte fórmula:

C22M523 - em " C22" --> "C2" --> siginifca que o cara trabalha do departamento 20 ( vinte ), caso fosse o usuário C33M152 a mesma lógica: o "33" que vem depois da letra "C", quer dizer que o usuário é do departamento 30 ( trinta )

casop-513 - O primeiro depois da expressão "casop-" ( caso o numero 513 que começa com 51 ) significa que o cara é do departamento 50, se fosse o usuário casop-412 seria aplicado a mesma lógica, o dígito 4 significa que ele é do departamento quarenta.

Desta forma eu queria tirar o departamento para todos os usuários que comecem com a expressão "casop" e "Cxx", que começem com dígitos de 0 a 5 ( departamentos 05,06,10, 20,30 ,40, 50 ) e números acima de 5 ( 5 a 9 ) o departamento padrão seria "colat"

Os demais usuários ( Administrador, Unknown, e Local_User ) são usuários ignorados os quais eu queria atribuir departamento "X" .

Não tenho a mínima ideia de como fazer, vcs podem me ajudar?




  


2. Re: Como criar uma coluna a mais com texto provindo de processamento? [RESOLVIDO]

Ronaldo Ferreira de Lima
textmode

(usa Slackware)

Enviado em 11/05/2016 - 18:25h

Pelo visto, você pegou um problema "muito grande" para resolver. Nem cheguei a testar o script porque vi muitos erros de sintaxe. Vamos do início então, dividir para conquistar:

1. Faça um shell que apenas pegue a primeira coluna e consiga separa em uma variável o dígito relevante.
2. Implemente aquele "monte" de regra que citou, imprimindo a correlação nome de usuário => departamento.
3. Implementar a impressão da última coluna.

Para cada passo provavelmente virão várias dúvidas, a maioria você encontrará respondida nos fóruns etc, mas não custa tentar peguntar aqui cada item específico, é mais fácil até para quem for ajudar porque não gasta mais que 5 minutos para ler, entender e responder.

[]'s
--
"Não manejo bem as palavras
Mas manipulo bem as strings."
------------------------------
https://perspicazsite.wordpress.com


3. Re: Como criar uma coluna a mais com texto provindo de processamento? [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 11/05/2016 - 18:43h

Tenho a impressão de que está mais para AWK.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Consegui!!!

Luiz Carlos
luizcarlos18rj

(usa Suse)

Enviado em 15/05/2016 - 16:36h

Consegui com o código abaixo, alguém sabe otimizar?



data=$(date +%d%m%y)

#criação da coluna "departamento"

dept_espec(){

dept=`echo $Linha |cut -d ';' -f2 | cut -c 7-8`

case $dept in

01) echo $Linha";01" >> relatorio_restante_$data.txt;;

05) echo $Linha";05" >> relatorio_restante_$data.txt;;

06) echo $Linha";06" >> relatorio_restante_$data.txt;;

esac
}

nome_dept(){
case $dept in

1) echo $Linha";10" >> relatorio_restante_$data.txt;;

2) echo $Linha";20" >> relatorio_restante_$data.txt;;

3) echo $Linha";30" >> relatorio_restante_$data.txt;;

4) echo $Linha";40" >> relatorio_restante_$data.txt;;

5) echo $Linha";50" >> relatorio_restante_$data.txt;;

esac
}

dept(){

cat relatorio_restante_undept_$data.txt | while read Linha; do
user=`echo $Linha | cut -d ';' -f2 | cut -c 1-5`
user2=`echo $user | grep C[0-9]`

if [ $user == "casop" ];then

dept=`echo $Linha |cut -d ';' -f2 | cut -c 7`

if [ $dept -lt 1 ];then

dept_espec

elif [ $dept -gt 5 ];then

echo $Linha";colat" >> relatorio_restante_$data.txt

else

nome_dept

fi

elif [ "$user" == "$user2" ];then

dept=`echo $Linha |cut -d ';' -f2 | cut -c2`

if [ $dept -lt 1 ];then

dept_espec

elif [ $dept -gt 5 ];then

echo "$Linha;colat" >> relatorio_restante_$data.txt

else

nome_dept

fi

else

echo $Linha";x" >> relatorio_restante_$data.txt
fi
done
}



A saída:



Relat??rio reprografia;casop-5214;2016-05-09;13:30:39;1;A4;Completed;50
04 - GUIA RECOLH. JUROS POPANÇA ;casop-513;2016-05-09;13:30:38;1;A4;Completed;50
VALE SEGURO KOMBI;Unknown;2016-05-09;13:08:22;1;A4;Completed;x
C. ALMEIDA 2008.pdf;casop-412a1;2016-05-09;10:36:00;11;A4;Completed;40
C. ALMEIDA 2007.pdf;casop-412a1;2016-05-09;10:35:21;2;A4;Completed;40
Verticalidade GYRO (v1_72).pdf;casop-01a1;2016-05-09;10:31:20;2;A4;Completed;01
Untitled;casop-111;2016-05-09;09:53:49;6;A4;Completed;10
Verticalidade GYRO (v1_7)b.xlsx;casop-01a1;2016-05-09;09:22:27;1;A4;Completed;01
Verticalidade GYRO (v1_7)b.xlsx;casop-01a1;2016-05-09;09:21:33;1;A4;Completed;01
Microsoft Word - REQUERIMENTO MO;casop-061;2016-05-12;10:34:33;2;A4;Completed;06
relaaaaa.pdf;cadpes;2016-05-12;10:31:24;26;A4;Completed;x
Boleto Plano Amigo - Abril.pdf ?;administrador;2016-05-12;10:26:30;1;A4;Completed;x
ATA RCG-ABR_2016.pdf;casop-31a5;2016-05-12;09:35:38;2;A4;Completed;30
DIRET DE HIDRO;casop-72;2016-05-12;09:30:13;4;A4;Completed;colat








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts