Copiar trecho de um arquivo [RESOLVIDO]

1. Copiar trecho de um arquivo [RESOLVIDO]

Rafael Killmann
rkillmann

(usa Red Hat)

Enviado em 26/12/2018 - 18:27h

Boa tarde, trabalho em um supermercado e estou tentando criar um sistema de busca de cupom mas não estou conseguindo.

Cada caixa gera um arquivo com a venda do dia todo (cada venda que finaliza entra nesse arquivo e o formato fica igual ao cupom que o cliente recebe) porém as vezes no caixa a impressora falha e precisamos buscar dentro desse arquivo o cupom do cliente para reimprimir em outra impressora.

Usei o seguinte comando para buscar o cupom pelo valor
clear

echo "Digite o valor do cupom (Ex: 12,34)"
read valor

cd /files/
egrep -A 32 "VALOR TOTAL.*$valor" exemplocupom > exemplocupom2

Consegui apenas copiar o trecho que vai da linha onde está o valor até o final do cupom mas não achei um jeito de conseguir buscar o restante que tem para cima.

Se alguém puder ajudar agradeço pois não "manjo" muito e estamos apanhando aqui!!

OBS: Não achei uma opção para anexar arquivo então segue abaixo um dos cupons do arquivo (lembrando que a quantidade de produtos pode variar)

-----------------------------------------------
MERCADO X
NOME DA RUA, 1234
BAIRRO - CIDADE - RS - 00000000
CNPJ:12.345.678/9123-45 IE: 1234567890
-----------------------------------------------
26/12/2018 17:40:00 TRANSACAO: 12345
-----------------------------------------------
DANFE NFC-e Documento Auxiliar
da Nota Fiscal Eletronica para Consumidor Final
Nao Permite aproveitamento de credito de ICMS
-----------------------------------------------
Item Cod Descricao Qtde Un VlrUnit VlrTot
-----------------------------------------------
87654321 PRODUTO NUMERO 1 1X500ML
24 UND X 0,75 18,00
12345678 PRODUTO NUMERO 2 1X500ML
24 UND X 0,88 21,12
-----------------------------------------------
QTD. TOTAL DE ITENS 48
VALOR TOTAL R$ 39,12
FORMA DE PAGAMENTO Valor Pago
Cartão de Débito 39,12
-----------------------------------------------
Informacao dos Tributos Totais e Incidentes
(Lei Federal 12.741/2012)
Vlr.Aprox.Tributos: Federal R$0,49 (1,23%)
Vlr.Aprox.Tributos: Estadual R$0,49 (1,23%)
Fonte: IBPT.
-----------------------------------------------
AREA DE MENSAGEM FISCAL
Numero: 000123456 Serie: 123
Emissao: 26/12/2018 17:40:00
Consulte a Chave de Acesso em https://www.sefaz
rs.gov.br/NFCE/NFCE-COM.aspx
CHAVE DE ACESSO
12345678901234567890123456789012345678901234
-----------------------------------------------
CONSUMIDOR NAO IDENTIFICADO
-----------------------------------------------
https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx?
p=12345678901234567890123456789012345678901234|
2|1|1|1234567890123456789012345678901234567890
-----------------------------------------------
MAESTROCP REDE
123456******7890 A:123456
DEBITO A VISTA VALOR:39,12
123456789012345 DOC:123456 (SiTef)
-----------------------------------------------
NomeSistema - AT.13.c00 - Unisys Brasil Ltda.
-----------------------------------------------
ModPDV VERSAO:12.34 PDV:123 LJ:132
OPR:NomeDaOperadora 26/12/2018 17:40:00



  


2. MELHOR RESPOSTA

Perfil removido
removido

(usa Nenhuma)

Enviado em 27/12/2018 - 00:17h

Fiz uma gambira aqui:

#!/bin/bash

echo "Digite o valor do cupom (Ex: 12,34)"
read VAL

ARQ1="exemplocupom"
ARQ2="/tmp/filter.txt"
LIN1=$(grep -n "VALOR TOTAL.*$VAL" $ARQ1 | cut -d ":" -f1)
LIN2=$(grep -n "MERCADO X" $ARQ1 | cut -d ":" -f1 > $ARQ2)

for i in $(cat $ARQ2); do
if [ $LIN1 -gt $i ]; then
echo $i > $ARQ2
fi
done

SUB=$(($LIN1 - $(cat $ARQ2)))

grep -A32 -B$SUB "VALOR TOTAL.*$VAL" $ARQ1 > exemplocupom2



3. Re: Copiar trecho de um arquivo

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/12/2018 - 18:49h

Utilizando como parâmetro a transação:

grep -A49 -B6 "TRANSACAO:.*12345" exemplocupom 


$ man grep
 
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing a group separator (described under --group-separator) between contiguous groups of matches. With the -o or
--only-matching option, this has no effect and a warning is given.

-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing a group separator (described under --group-separator) between contiguous groups of matches. With the -o or
--only-matching option, this has no effect and a warning is given.

-C NUM, -NUM, --context=NUM
Print NUM lines of output context. Places a line containing a group separator (described under --group-separator) between contiguous groups of matches. With the -o or --only-matching
option, this has no effect and a warning is given.




4. Re: Copiar trecho de um arquivo

Rafael Killmann
rkillmann

(usa Red Hat)

Enviado em 26/12/2018 - 18:59h

amarildosertorio escreveu:

Utilizando como parâmetro a transação:

grep -A49 -B6 "TRANSACAO:.*12345" exemplocupom 


$ man grep
 
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing a group separator (described under --group-separator) between contiguous groups of matches. With the -o or
--only-matching option, this has no effect and a warning is given.

-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing a group separator (described under --group-separator) between contiguous groups of matches. With the -o or
--only-matching option, this has no effect and a warning is given.

-C NUM, -NUM, --context=NUM
Print NUM lines of output context. Places a line containing a group separator (described under --group-separator) between contiguous groups of matches. With the -o or --only-matching
option, this has no effect and a warning is given.



Ai que está o problema, quando a impressão falha não sai nada no cupom e não aparece o número da transação na tela do PDV, a única informação que temos é o valor total.

Minha ideia seria alguma forma de copiar do Valor Total até a linha onde aparece o nome do mercado mas a quantidade de linhas entre esses dois pontos varia de acordo com o quantidade de produtos no cupom, outro problema é que dentro do arquivo ficam todos os cupons que foram finalizados no dia então o nome do mercado irá aparecer varias vezes.


5. Re: Copiar trecho de um arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/12/2018 - 19:27h

Vai ser um problema ter arquivos com valores iguais.

Bem... testa ai:

#!/bin/bash

echo "Digite o valor do cupom (Ex: 12,34)"
read val

cd /files/
ARQ=$(grep -r "VALOR TOTAL.*$val" | cut -d ":" -f1)
NLIN=$(wc -l $ARQ | cut -d " " -f1)
SUB=$(($NLIN - 32))

grep -A32 -B$SUB "VALOR TOTAL.*$valor" $ARQ > exemplocupom2




6. Re: Copiar trecho de um arquivo

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/12/2018 - 19:42h

rkillmann escreveu:

outro problema é que dentro do arquivo ficam todos os cupons que foram finalizados no dia então o nome do mercado irá aparecer varias vezes.


Saquei! O script acima não vai servir. Pensei que era um arquivo para cada compra. Enfim... é apenas uma questão de tratamento.



7. Re: Copiar trecho de um arquivo [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 26/12/2018 - 19:46h

.
.
.
.
velho , esse critério de busca é meio sem noção, fico aqui imaginando ... no universo supermercado, quantas compras possuiriam o mesmo '$valor' na linha "VALOR TOTAL" ???

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

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

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



8. Re: Copiar trecho de um arquivo [RESOLVIDO]

Rafael Killmann
rkillmann

(usa Red Hat)

Enviado em 26/12/2018 - 19:49h

Mauriciodez escreveu:

.
.
.
.
velho , esse critério de busca é meio sem noção, fico aqui imaginando ... no universo supermercado, quantas compras possuiriam o mesmo '$valor' na linha "VALOR TOTAL" ???

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

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

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


Pior que é mais raro do que parece kkkkk E é um arquivo para cada caixa então o PDV 1 teria que passar 2 vendas exatamente do mesmo valor


9. Re: Copiar trecho de um arquivo [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 26/12/2018 - 19:53h


Mauriciodez escreveu:

.
.
.
.
velho , esse critério de busca é meio sem noção, fico aqui imaginando ... no universo supermercado, quantas compras possuiriam o mesmo '$valor' na linha "VALOR TOTAL" ???

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

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

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


O software do mercado deveria oferecer recurso de reimpressão e busca avançada (imagino ser um software proprietário). Convenhamos, isso é bem básico.


10. Re: Copiar trecho de um arquivo [RESOLVIDO]

Rafael Killmann
rkillmann

(usa Red Hat)

Enviado em 26/12/2018 - 20:14h

amarildosertorio escreveu:


Mauriciodez escreveu:

.
.
.
.
velho , esse critério de busca é meio sem noção, fico aqui imaginando ... no universo supermercado, quantas compras possuiriam o mesmo '$valor' na linha "VALOR TOTAL" ???

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

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

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


O software do mercado deveria oferecer recurso de reimpressão e busca avançada (imagino ser um software proprietário). Convenhamos, isso é bem básico.


Existe uma página de reimpressão mas como tudo é processado pelo SEFAZ (não só da onde trabalho mas todos lugares com NFCe os cupons são processados pelo SEFAZ RS) muitas vezes congestiona o servidor deles e as notas entram em contingência não sendo possível imprimir pela página oficial.


11. Re: Copiar trecho de um arquivo [RESOLVIDO]

Mauriciodez
Mauriciodez

(usa Debian)

Enviado em 26/12/2018 - 20:21h

rkillmann escreveu:
Pior que é mais raro do que parece kkkkk E é um arquivo para cada caixa então o PDV 1 teria que passar 2 vendas exatamente do mesmo valor


se é um arquivo por PDV, acho que seria só imprimir o último registro, já que seria ele que estaria travado ... então basta buscar o padrão de separação de cupons e imprimir até o final .

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

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

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



12. Re: Copiar trecho de um arquivo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/12/2018 - 21:59h

rkillmann escreveu:

Boa tarde, trabalho em um supermercado e estou tentando criar um sistema de busca de cupom mas não estou conseguindo.

Cada caixa gera um arquivo com a venda do dia todo (cada venda que finaliza entra nesse arquivo e o formato fica igual ao cupom que o cliente recebe) porém as vezes no caixa a impressora falha e precisamos buscar dentro desse arquivo o cupom do cliente para reimprimir em outra impressora.

Usei o seguinte comando para buscar o cupom pelo valor
clear

echo "Digite o valor do cupom (Ex: 12,34)"
read valor

cd /files/
egrep -A 32 "VALOR TOTAL.*$valor" exemplocupom > exemplocupom2

Consegui apenas copiar o trecho que vai da linha onde está o valor até o final do cupom mas não achei um jeito de conseguir buscar o restante que tem para cima.

Se alguém puder ajudar agradeço pois não "manjo" muito e estamos apanhando aqui!!

OBS: Não achei uma opção para anexar arquivo então segue abaixo um dos cupons do arquivo (lembrando que a quantidade de produtos pode variar)

-----------------------------------------------
MERCADO X
NOME DA RUA, 1234
BAIRRO - CIDADE - RS - 00000000
CNPJ:12.345.678/9123-45 IE: 1234567890
-----------------------------------------------
26/12/2018 17:40:00 TRANSACAO: 12345
-----------------------------------------------
DANFE NFC-e Documento Auxiliar
da Nota Fiscal Eletronica para Consumidor Final
Nao Permite aproveitamento de credito de ICMS
-----------------------------------------------
Item Cod Descricao Qtde Un VlrUnit VlrTot
-----------------------------------------------
87654321 PRODUTO NUMERO 1 1X500ML
24 UND X 0,75 18,00
12345678 PRODUTO NUMERO 2 1X500ML
24 UND X 0,88 21,12
-----------------------------------------------
QTD. TOTAL DE ITENS 48
VALOR TOTAL R$ 39,12
FORMA DE PAGAMENTO Valor Pago
Cartão de Débito 39,12
-----------------------------------------------
Informacao dos Tributos Totais e Incidentes
(Lei Federal 12.741/2012)
Vlr.Aprox.Tributos: Federal R$0,49 (1,23%)
Vlr.Aprox.Tributos: Estadual R$0,49 (1,23%)
Fonte: IBPT.
-----------------------------------------------
AREA DE MENSAGEM FISCAL
Numero: 000123456 Serie: 123
Emissao: 26/12/2018 17:40:00
Consulte a Chave de Acesso em https://www.sefaz
rs.gov.br/NFCE/NFCE-COM.aspx
CHAVE DE ACESSO
12345678901234567890123456789012345678901234
-----------------------------------------------
CONSUMIDOR NAO IDENTIFICADO
-----------------------------------------------
https://www.sefaz.rs.gov.br/NFCE/NFCE-COM.aspx?
p=12345678901234567890123456789012345678901234|
2|1|1|1234567890123456789012345678901234567890
-----------------------------------------------
MAESTROCP REDE
123456******7890 A:123456
DEBITO A VISTA VALOR:39,12
123456789012345 DOC:123456 (SiTef)
-----------------------------------------------
NomeSistema - AT.13.c00 - Unisys Brasil Ltda.
-----------------------------------------------
ModPDV VERSAO:12.34 PDV:123 LJ:132
OPR:NomeDaOperadora 26/12/2018 17:40:00


Boa noite.
O comando abaixo, fornece a linha inicial, linha com o valor e a ultima linha de cada cupom.
egrep -n '^(MERCADO)|^(VALOR TOTAL R\$ .*)$|^(OPR:.*)$' cupom.txt|sed -r 's/^[0-9]+:OPR:.*$/&\n/g' 

2:MERCADO X #Linha inicial - 1
21:VALOR TOTAL R$ 39,12
53:OPR:NomeDaOperadora 26/12/2018 17:40:00 #linha final

55:MERCADO X
74:VALOR TOTAL R$ 49,12
106:OPR:NomeDaOperadora 26/12/2018 17:45:00


Escolha qual cupom quer e depois use o sed.
Exemplo:
sed -n '1,53p' cupom.txt

Marcelo Oliver




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts