msoliver
(usa Debian)
Enviado em 25/09/2023 - 22:19h
fran_bi_pro escreveu:
Boa noite a todos!
Tenho um arquivo com vários registros e entre as colunas 3 e 8 contém valores iguais em várias linhas no qual preciso retirá-las.
Exemplo:
E112345678.....(LINHA1)
E412345678.....(LINHA2)
E512345678.....(LINHA3)
Observe que na posição 3 até 8 temos valores iguais, neste caso, o valor '12345678'. Então ao invés de ter 3 linhas para este valor, preciso deixar somente uma linha.
Alguém poderia me ajudar?
Boa noite Fran.
Segue sugestão:
cat linhas.txt
E112345678PPTBasico7f9f2bc5577c8d4ac39d2967b677df964f7e51e733b4175d381
E287654321PPUBasico58f0a0532c1673e90364de45bcb0d4cf4474ca8c81d7b40c912
E312345678PPVBasico05c16a3f15752004586f740f5470230d5344e68c137ed389f63
E498765432PPWBasico071553f638ebac7c6c598c5c0d56702027827ef19f8cf0dd4e4
E512345678PPXBasicoe613cf76b40f2e999fb8a200e20fac2f146287f7eda59403d55
E601234567PPYBasico67e564e80d93ccf8a36bda8e0a24435c858d3d35582c295ca06
E712345678PPZBasico6420dbc98a8a312028648cd4aad47ca0d86a771e96e1844f1d7
E812345678PPzBasico67e564e80d93ccf8a36bda8e0a24435c858d3d35582c295ca08
gawk 'BEGIN{FIELDWIDTHS="2 8"} {if(! ($2 in rep)){print $0;rep[$2]++;}}' linhas.txt
E112345678PPTBasico7f9f2bc5577c8d4ac39d2967b677df964f7e51e733b4175d381
E287654321PPUBasico58f0a0532c1673e90364de45bcb0d4cf4474ca8c81d7b40c912
E498765432PPXBasico071553f638ebac7c6c598c5c0d56702027827ef19f8cf0dd4e4
E601234567PPXBasico67e564e80d93ccf8a36bda8e0a24435c858d3d35582c295ca06
FIELDWIDTHS ="2 8" => define campo 01 para 2 caracteres e campo 02 para 8 caracteres.
if(! ($2 in rep)) => Se, campo 2 não esta em "rep"
{print $0; => imprime a linha inteira
rep[$2]++; => acrescenta na matriz rep
}}
Linhas com '12345678'.
grep -n '12345678' linhas.txt
1:E112345678 PPTBasico7f9f2bc5577c8d4ac39d2967b677df964f7e51e733b4175d381
3:E312345678 PPVBasico05c16a3f15752004586f740f5470230d5344e68c137ed389f63
5:E512345678 PPWBasicoe613cf76b40f2e999fb8a200e20fac2f146287f7eda59403d55
7:E712345678 PPYBasico6420dbc98a8a312028648cd4aad47ca0d86a771e96e1844f1d7
8:E812345678 PPZBasico67e564e80d93ccf8a36bda8e0a24435c858d3d35582c295ca08
printa só a linha 1
gawk 'BEGIN{FIELDWIDTHS="2 8"} {if(! ($2 in rep)){print NR,$0;rep[$2]++;}}' linhas.txt
1 E112345678PPTBasico7f9f2bc5577c8d4ac39d2967b677df964f7e51e733b4175d381
2 E287654321PPUBasico58f0a0532c1673e90364de45bcb0d4cf4474ca8c81d7b40c912
4 E498765432PPXBasico071553f638ebac7c6c598c5c0d56702027827ef19f8cf0dd4e4
6 E601234567PPXBasico67e564e80d93ccf8a36bda8e0a24435c858d3d35582c295ca06
É isso, espero que resolva o seu problema....
______________________________________________________________________
Importante:
lynx --dump https://www.vivaolinux.com.br/termos-de-uso/ | sed -nr '/^[ ]+Se/,/dou.$/p'
______________________________________________________________________
Nota de esclarecimento:
O comando: ACIMA , faz parte da minha assinatura.
Att.: Marcelo Oliver
______________________________________________________________________