Agrupar linhas em uma só fazendo uma varredura em um arquivo gerando um arquivo novo

1. Agrupar linhas em uma só fazendo uma varredura em um arquivo gerando um arquivo novo

Alexandre de Medeiros Poulis
poulis

(usa Red Hat)

Enviado em 29/08/2018 - 18:32h

Senhores,

preciso fazer a leitura de um arquivo que pode conter 50k, 100k ou até mais linhas e a partir de uma condição ele agrupar a própria linha e as próximas 3 gerando um arquivo novo de saída... segue um exemplo:

formato do arquivo sempre nesta sequencia:

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

eu preciso que toda linha que ele encontre a string "The command is valid" "ele "printe" a linha com a string em questão e as próximas 3 linhas todas juntas em uma linha só... e vá adicionando respeitando essas condições toda vez que encontrar a string em questão no arquivo de saída... ou seja, se vamos agrupar 4 linhas em uma, o arquivo novo passará a ter o número de linhas do arquivo original dividido por 4... ficando assim...

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network ElementBCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [

consegui agrupar as linhas com o comando abaixo... porém não consigo fazer com que o "sed" continue a varredura do arquivo e de sequência no incremento do novo arquivo com as demais ocorrencias da string The command is valid... quando mando ler o arquivo todo e gerar a saída, ele só grava a primeira concatenação das primeiras 4 linhas

sed -n '/The command is valid\./{x;p;x;N;N;N;p;q;};1!{H;g;};1,0!s/[^\n]*\n//;h;' | sed ':a;$!N;s/\n//;ta;' arq_entrada.txt >> arq_saida.txt

agradeço muito antecipadamente a ajuda

abs,

Alexandre Poulis







  


2. Re: Agrupar linhas em uma só fazendo uma varredura em um arquivo gerando um arquivo novo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 29/08/2018 - 23:23h

poulis escreveu:

Senhores,

preciso fazer a leitura de um arquivo que pode conter 50k, 100k ou até mais linhas e a partir de uma condição ele agrupar a própria linha e as próximas 3 gerando um arquivo novo de saída... segue um exemplo:

formato do arquivo sempre nesta sequencia:

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

eu preciso que toda linha que ele encontre a string "The command is valid" "ele "printe" a linha com a string em questão e as próximas 3 linhas todas juntas em uma linha só... e vá adicionando respeitando essas condições toda vez que encontrar a string em questão no arquivo de saída... ou seja, se vamos agrupar 4 linhas em uma, o arquivo novo passará a ter o número de linhas do arquivo original dividido por 4... ficando assim...

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network ElementBCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [

consegui agrupar as linhas com o comando abaixo... porém não consigo fazer com que o "sed" continue a varredura do arquivo e de sequência no incremento do novo arquivo com as demais ocorrencias da string The command is valid... quando mando ler o arquivo todo e gerar a saída, ele só grava a primeira concatenação das primeiras 4 linhas

sed -n '/The command is valid\./{x;p;x;N;N;N;p;q;};1!{H;g;};1,0!s/[^\n]*\n//;h;' | sed ':a;$!N;s/\n//;ta;' arq_entrada.txt >> arq_saida.txt

agradeço muito antecipadamente a ajuda

abs,

Alexandre Poulis

Boa noite Alexandre.
Veja se é isso:
cat texto.txt
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

sed 's/\[$/\[\n/' texto.txt|grep -A3 'The command is valid.'|xargs|sed 's/ -- /\n/g'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Ou
sed 's/\[$/\[\n/' texto.txt|awk 'BEGIN{FS="\n";RS="\n\n"}  /The command is valid./ {print $1,$2,$3,$4}'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Att.:
Marcelo Oliver


3. Agrupar linhas em uma só fazendo uma varredura em um arquivo gerando um arquivo novo

Alexandre de Medeiros Poulis
poulis

(usa Red Hat)

Enviado em 30/08/2018 - 12:19h

msoliver escreveu:

poulis escreveu:

Senhores,

preciso fazer a leitura de um arquivo que pode conter 50k, 100k ou até mais linhas e a partir de uma condição ele agrupar a própria linha e as próximas 3 gerando um arquivo novo de saída... segue um exemplo:

formato do arquivo sempre nesta sequencia:

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

eu preciso que toda linha que ele encontre a string "The command is valid" "ele "printe" a linha com a string em questão e as próximas 3 linhas todas juntas em uma linha só... e vá adicionando respeitando essas condições toda vez que encontrar a string em questão no arquivo de saída... ou seja, se vamos agrupar 4 linhas em uma, o arquivo novo passará a ter o número de linhas do arquivo original dividido por 4... ficando assim...

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network ElementBCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [

consegui agrupar as linhas com o comando abaixo... porém não consigo fazer com que o "sed" continue a varredura do arquivo e de sequência no incremento do novo arquivo com as demais ocorrencias da string The command is valid... quando mando ler o arquivo todo e gerar a saída, ele só grava a primeira concatenação das primeiras 4 linhas

sed -n '/The command is valid\./{x;p;x;N;N;N;p;q;};1!{H;g;};1,0!s/[^\n]*\n//;h;' | sed ':a;$!N;s/\n//;ta;' arq_entrada.txt >> arq_saida.txt

agradeço muito antecipadamente a ajuda

abs,

Alexandre Poulis

Boa noite Alexandre.
Veja se é isso:
cat texto.txt
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

sed 's/\[$/\[\n/' texto.txt|grep -A3 'The command is valid.'|xargs|sed 's/ -- /\n/g'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Ou
sed 's/\[$/\[\n/' texto.txt|awk 'BEGIN{FS="\n";RS="\n\n"}  /The command is valid./ {print $1,$2,$3,$4}'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Att.:
Marcelo Oliver


Opa Marcelo... Muito Obrigado... mas não funcionou... meu arquivo original que estou utilizando tem 100 linhas na sequência conforme mencionei... já verifiquei e não tem nada fora deste padrão dentro do arquivo...

os 2 comandos sugeridos estão concatenando todas as linhas em uma só...

concatenaram as linhas, mas em vez de 4 em 4 colocou todo o conteúdo do arquivo em uma única linha....o arquivo original de 100 linhas deveria ter 25 após execução dos comandos...

Obrigado...

Alexandre

wc -l teste_monit_NE1.txt
100 teste_monit_NE1.txt

sed 's/\[$/\[\n/' teste_monit_NE1.txt | grep -A3 'The command is valid.'|xargs|sed 's/ -- /\n/g' | wc -l
1

sed 's/\[$/\[\n/' teste_monit_NE1.txt|awk 'BEGIN{FS="\n";RS="\n\n"} /The command is valid./ {print $1,$2,$3,$4}' | wc -l
1





4. Re: Agrupar linhas em uma só fazendo uma varredura em um arquivo gerando um arquivo novo

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 30/08/2018 - 21:37h

poulis escreveu:

msoliver escreveu:

poulis escreveu:

Senhores,

preciso fazer a leitura de um arquivo que pode conter 50k, 100k ou até mais linhas e a partir de uma condição ele agrupar a própria linha e as próximas 3 gerando um arquivo novo de saída... segue um exemplo:

formato do arquivo sempre nesta sequencia:

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

eu preciso que toda linha que ele encontre a string "The command is valid" "ele "printe" a linha com a string em questão e as próximas 3 linhas todas juntas em uma linha só... e vá adicionando respeitando essas condições toda vez que encontrar a string em questão no arquivo de saída... ou seja, se vamos agrupar 4 linhas em uma, o arquivo novo passará a ter o número de linhas do arquivo original dividido por 4... ficando assim...

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network ElementBCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [

consegui agrupar as linhas com o comando abaixo... porém não consigo fazer com que o "sed" continue a varredura do arquivo e de sequência no incremento do novo arquivo com as demais ocorrencias da string The command is valid... quando mando ler o arquivo todo e gerar a saída, ele só grava a primeira concatenação das primeiras 4 linhas

sed -n '/The command is valid\./{x;p;x;N;N;N;p;q;};1!{H;g;};1,0!s/[^\n]*\n//;h;' | sed ':a;$!N;s/\n//;ta;' arq_entrada.txt >> arq_saida.txt

agradeço muito antecipadamente a ajuda

abs,

Alexandre Poulis

Boa noite Alexandre.
Veja se é isso:
cat texto.txt
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

sed 's/\[$/\[\n/' texto.txt|grep -A3 'The command is valid.'|xargs|sed 's/ -- /\n/g'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Ou
sed 's/\[$/\[\n/' texto.txt|awk 'BEGIN{FS="\n";RS="\n\n"}  /The command is valid./ {print $1,$2,$3,$4}'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Att.:
Marcelo Oliver


Opa Marcelo... Muito Obrigado... mas não funcionou... meu arquivo original que estou utilizando tem 100 linhas na sequência conforme mencionei... já verifiquei e não tem nada fora deste padrão dentro do arquivo...

os 2 comandos sugeridos estão concatenando todas as linhas em uma só...

concatenaram as linhas, mas em vez de 4 em 4 colocou todo o conteúdo do arquivo em uma única linha....o arquivo original de 100 linhas deveria ter 25 após execução dos comandos...

Obrigado...

Alexandre

wc -l teste_monit_NE1.txt
100 teste_monit_NE1.txt

sed 's/\[$/\[\n/' teste_monit_NE1.txt | grep -A3 'The command is valid.'|xargs|sed 's/ -- /\n/g' | wc -l
1

sed 's/\[$/\[\n/' teste_monit_NE1.txt|awk 'BEGIN{FS="\n";RS="\n\n"} /The command is valid./ {print $1,$2,$3,$4}' | wc -l
1




Boa noite Alexandre.
Esse arquivo foi gerado no Windows?
execute o comando:
cat -vET arquivo.txt
Se no fim da linha tiver "[^M$", é formato DOS.
O comando file arquivo.txt te fornece o resultado.
file arquivo.txt
arquivo.txt: ASCII text, with CRLF line terminators
with CRLF line terminators => Indica que É DOS!

Montei aqui um arquivo com 120 linhas (30 registros),
Funcionou perfeitamente...

Marcelo Oliver


5. Re: Agrupar linhas em uma só fazendo uma varredura em um arquivo gerando um arquivo novo

Alexandre de Medeiros Poulis
poulis

(usa Red Hat)

Enviado em 03/09/2018 - 20:07h

msoliver escreveu:

poulis escreveu:

msoliver escreveu:

poulis escreveu:

Senhores,

preciso fazer a leitura de um arquivo que pode conter 50k, 100k ou até mais linhas e a partir de uma condição ele agrupar a própria linha e as próximas 3 gerando um arquivo novo de saída... segue um exemplo:

formato do arquivo sempre nesta sequencia:

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

eu preciso que toda linha que ele encontre a string "The command is valid" "ele "printe" a linha com a string em questão e as próximas 3 linhas todas juntas em uma linha só... e vá adicionando respeitando essas condições toda vez que encontrar a string em questão no arquivo de saída... ou seja, se vamos agrupar 4 linhas em uma, o arquivo novo passará a ter o número de linhas do arquivo original dividido por 4... ficando assim...

BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network ElementBCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [

consegui agrupar as linhas com o comando abaixo... porém não consigo fazer com que o "sed" continue a varredura do arquivo e de sequência no incremento do novo arquivo com as demais ocorrencias da string The command is valid... quando mando ler o arquivo todo e gerar a saída, ele só grava a primeira concatenação das primeiras 4 linhas

sed -n '/The command is valid\./{x;p;x;N;N;N;p;q;};1!{H;g;};1,0!s/[^\n]*\n//;h;' | sed ':a;$!N;s/\n//;ta;' arq_entrada.txt >> arq_saida.txt

agradeço muito antecipadamente a ajuda

abs,

Alexandre Poulis

Boa noite Alexandre.
Veja se é isso:
cat texto.txt
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid.
BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server.
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element
BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

sed 's/\[$/\[\n/' texto.txt|grep -A3 'The command is valid.'|xargs|sed 's/ -- /\n/g'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Ou
sed 's/\[$/\[\n/' texto.txt|awk 'BEGIN{FS="\n";RS="\n\n"}  /The command is valid./ {print $1,$2,$3,$4}'
BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:643:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:657:17343] [636818008]: *Info: SOAP server sent the following response [
BCKSOAP [2018/08/29 15:17:58:857:17343] [636818025]: Info: The command is valid. BCKSOAP [2018/08/29 15:17:58:943:17343] [636818025]: Info: SOAP Device Driver will send the XML command to SOAP server. BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: Network Element BCKSOAP [2018/08/29 15:17:58:957:17343] [636818025]: *Info: SOAP server sent the following response [

Att.:
Marcelo Oliver


Opa Marcelo... Muito Obrigado... mas não funcionou... meu arquivo original que estou utilizando tem 100 linhas na sequência conforme mencionei... já verifiquei e não tem nada fora deste padrão dentro do arquivo...

os 2 comandos sugeridos estão concatenando todas as linhas em uma só...

concatenaram as linhas, mas em vez de 4 em 4 colocou todo o conteúdo do arquivo em uma única linha....o arquivo original de 100 linhas deveria ter 25 após execução dos comandos...

Obrigado...

Alexandre

wc -l teste_monit_NE1.txt
100 teste_monit_NE1.txt

sed 's/\[$/\[\n/' teste_monit_NE1.txt | grep -A3 'The command is valid.'|xargs|sed 's/ -- /\n/g' | wc -l
1

sed 's/\[$/\[\n/' teste_monit_NE1.txt|awk 'BEGIN{FS="\n";RS="\n\n"} /The command is valid./ {print $1,$2,$3,$4}' | wc -l
1




Boa noite Alexandre.
Esse arquivo foi gerado no Windows?
execute o comando:
cat -vET arquivo.txt
Se no fim da linha tiver "[^M$", é formato DOS.
O comando file arquivo.txt te fornece o resultado.
file arquivo.txt
arquivo.txt: ASCII text, with CRLF line terminators
with CRLF line terminators => Indica que É DOS!

Montei aqui um arquivo com 120 linhas (30 registros),
Funcionou perfeitamente...

Marcelo Oliver


opa Marcelo,

boa noite...

após executar os comandos: "cat -vET arquivo.txt" "file "arquivo.txt"

PNXTL08 > file teste_monit_NE1.txt
teste_monit_NE1.txt: ASCII English text, with very long lines

PNXTL08 > cat -vET teste_monit_NE1.txt | head -2
BCKSOAP [2018/08/29 15:17:58:577:17343] [636818008]: Info: The command is valid.$
BCKSOAP [2018/08/29 15:17:58:577:17343] [636818008]: Info: SOAP Device Driver will send the XML command to SOAP server:]$

a solução que eu encontrei foi excluir as linhas que não me interessavam no arquivo e usei o comando abaixo que funcionou...

sed 'N;N;N;s/\n/ /g' teste_monit_NE1.txt

muito obrigado pela ajuda... e vamos tentando fazer funcionar...

abs...







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts