AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

1. AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

Rogerio Vieira
roncelio

(usa Outra)

Enviado em 04/02/2016 - 14:33h

Pessoal boa tarde,

Estou com um probleminha em meu script awk, onde eu tenho uma pasta (X) com 34 mil arquivos.txt com suas descrições na seguinte sequência [ 0.txt 1.txt 2.txt 3.txt ... 34000.txt]. Após sua execução ele fez a leitura dos arquivos e trouce apenas as informações que precisava, porém verifiquei que veio na sequência errada exemplo, ele trouce na seguinte sequência {0.txt 1.txt 10.txt 100.txt 1000.txt 10000.txt 10001.txt }.

Como posso fazer no meu script para ele ler os arquivos na sequência desejada? Ex: 0.txt 1.txt 2.txt 3.txt ... 34000.txt

Segue abaixo o script executado,

awk '/<\/s:Envelope>/' ./LogsFelipe/*.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' | awk -F"@@" '{print $2}' | awk -F"</entrySourceCode" '{print $0 "@@" $1}' | awk -F"<eventPrice>" '{print $0 "@@" $2}' | awk -F">@@" '{print $2}' | awk -F"</eventPrice>" '{print $0 "@@" $1}' | awk -F"<referenceNumber>" '{print $0 "@@" $2}' | awk -F"Envelope@@" '{print $2}' | awk -F"</referenceNumber>" '{print $0 "@@" $1}' | awk -F"<participantIdentification><code>" '{print $0 "@@" $2}' | awk -F"</s:Body></s:@@" '{print $2}' | awk -F"</code><participantCategory>" '{print $1}' | awk -F"@@" '{print $1 ";" $2 ";" $3 ";" $4}' >> NovoTestev2.csv;

Desde já agradeço a vossa atenção.
Att,
Rogério Máximo Vieira


  


2. MELHOR RESPOSTA

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 04/02/2016 - 15:12h


for (( i=1; i <= 34000; i++))
echo $i".txt"


3. AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência?

Rogerio Vieira
roncelio

(usa Outra)

Enviado em 04/02/2016 - 16:09h

Arthur_Hoch como ficar o for que passou dentro do meu script?

awk '/<\/s:Envelope>/' ./LogsFelipe/*.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt


4. Re: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 04/02/2016 - 16:36h

roncelio escreveu:

Arthur_Hoch como ficar o for que passou dentro do meu script?

awk '/<\/s:Envelope>/' ./LogsFelipe/*.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt


for (( i=1; i <= 34000; i++))
awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt


5. Re: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

Rogerio Vieira
roncelio

(usa Outra)

Enviado em 04/02/2016 - 17:14h

Arthur_Hoch escreveu:

roncelio escreveu:

Arthur_Hoch como ficar o for que passou dentro do meu script?

awk '/<\/s:Envelope>/' ./LogsFelipe/*.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt


for (( i=1; i <= 34000; i++))
awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt



======

Quando executo da forma que vc passou, esta dando o segunte erro:
Obs Estou executando dentro de um arquivo .sh

usuario@pc /cygdrive/c/Users/p-roncelio/Desktop/Testea
# ./AwkZanatto.sh
./AwkZanatto.sh: line 3: $'\r': command not found
./AwkZanatto.sh: line 4: syntax error near unexpected token `$'\r''
'/AwkZanatto.sh: line 4: `for (( i=1; i <= 34000; i++))





6. Re: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência?

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 04/02/2016 - 17:19h

roncelio escreveu:

Arthur_Hoch escreveu:

roncelio escreveu:

Arthur_Hoch como ficar o for que passou dentro do meu script?

awk '/<\/s:Envelope>/' ./LogsFelipe/*.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt


for (( i=1; i <= 34000; i++))
awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt



======

Quando executo da forma que vc passou, esta dando o segunte erro:
Obs Estou executando dentro de um arquivo .sh

usuario@pc /cygdrive/c/Users/p-roncelio/Desktop/Testea
# ./AwkZanatto.sh
./AwkZanatto.sh: line 3: $'\r': command not found
./AwkZanatto.sh: line 4: syntax error near unexpected token `$'\r''
'/AwkZanatto.sh: line 4: `for (( i=1; i <= 34000; i++))




É que eu uso zsh. No sh tem que por do e done...


1 #!/bin/sh
2 for (( i=1; i <= 34000; i++)); do
3 awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description ><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt
4 done





7. Re: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

Rogerio Vieira
roncelio

(usa Outra)

Enviado em 04/02/2016 - 17:30h

Arthur_Hoch escreveu:

roncelio escreveu:

Arthur_Hoch escreveu:

roncelio escreveu:

Arthur_Hoch como ficar o for que passou dentro do meu script?

awk '/<\/s:Envelope>/' ./LogsFelipe/*.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt


for (( i=1; i <= 34000; i++))
awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt



======

Quando executo da forma que vc passou, esta dando o segunte erro:
Obs Estou executando dentro de um arquivo .sh

usuario@pc /cygdrive/c/Users/p-roncelio/Desktop/Testea
# ./AwkZanatto.sh
./AwkZanatto.sh: line 3: $'\r': command not found
./AwkZanatto.sh: line 4: syntax error near unexpected token `$'\r''
'/AwkZanatto.sh: line 4: `for (( i=1; i <= 34000; i++))




É que eu uso zsh. No sh tem que por do e done...


1 #!/bin/sh
2 for (( i=1; i <= 34000; i++)); do
3 awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description ><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt
4 done




Mesmo assim retornou o erro abaixo:

# ./AwkZanattoV3.sh
./AwkZanattoV3.sh: line 2: syntax error near unexpected token `$'do\r''
'/AwkZanattoV3.sh: line 2: `for (( i=1; i <= 34000; i++)); do

Será que pode ser o fato ode estar executando no Cygwin?


8. Re: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 04/02/2016 - 17:34h

roncelio escreveu:

Arthur_Hoch escreveu:

roncelio escreveu:

Arthur_Hoch escreveu:

roncelio escreveu:

Arthur_Hoch como ficar o for que passou dentro do meu script?

awk '/<\/s:Envelope>/' ./LogsFelipe/*.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt


for (( i=1; i <= 34000; i++))
awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt



======

Quando executo da forma que vc passou, esta dando o segunte erro:
Obs Estou executando dentro de um arquivo .sh

usuario@pc /cygdrive/c/Users/p-roncelio/Desktop/Testea
# ./AwkZanatto.sh
./AwkZanatto.sh: line 3: $'\r': command not found
./AwkZanatto.sh: line 4: syntax error near unexpected token `$'\r''
'/AwkZanatto.sh: line 4: `for (( i=1; i <= 34000; i++))




É que eu uso zsh. No sh tem que por do e done...


1 #!/bin/sh
2 for (( i=1; i <= 34000; i++)); do
3 awk '/<\/s:Envelope>/' ./LogsFelipe/$i.txt* | awk '/participantIdentification><code>/ {if (x)print x;x="";}{x=(!x)?$0:x";"$0}END{print x;}' | awk -F"description ><entrySourceCode>" '{print $0 "@@" $2}' >>teste.txt
4 done




Mesmo assim retornou o erro abaixo:

# ./AwkZanattoV3.sh
./AwkZanattoV3.sh: line 2: syntax error near unexpected token `$'do\r''
'/AwkZanattoV3.sh: line 2: `for (( i=1; i <= 34000; i++)); do

Será que pode ser o fato ode estar executando no Cygwin?


Talvez.

Acho que o problema é no '\r', não tem '\r' ali... Tenta colocar 1 espaço depois do "do".


9. Re: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

10. Tópico: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência?

Rogerio Vieira
roncelio

(usa Outra)

Enviado em 04/02/2016 - 18:21h



Boa tarde Arthur,

Após analisar o link acima e transformar meu arquivo em Unix, funcionou agora. O único problema encontrado agora é que meu script com 34 mil registros sem o for durava 1 minuto para executar e com o for demora 6 horas rsrs.

Caso tenha um outra forma para ficar mais rápido eu agradeço. Pelo que entendi ele pega em ordem alfanumérico.

Desde já agradeço pela sua ajuda, que por sinal me ajudou muito.

Att,
Rogério Máximo Vieira


11. Re: AWK - Como ler todos os arquivos de uma Pasta com awk seguindo uma sequência? [RESOLVIDO]

Arthur J. Hoch
Arthur_Hoch

(usa FreeBSD)

Enviado em 04/02/2016 - 18:37h

roncelio escreveu:



Boa tarde Arthur,

Após analisar o link acima e transformar meu arquivo em Unix, funcionou agora. O único problema encontrado agora é que meu script com 34 mil registros sem o for durava 1 minuto para executar e com o for demora 6 horas rsrs.

Caso tenha um outra forma para ficar mais rápido eu agradeço. Pelo que entendi ele pega em ordem alfanumérico.

Desde já agradeço pela sua ajuda, que por sinal me ajudou muito.

Att,
Rogério Máximo Vieira


Você pode dividir a contagem em varios for's/funções e executar com '&' atrás. Tipo de 1 - 5000, 5001-10000...
Ou pode ler sobre o comando parallel, acho que funciona nesse caso:
 $ man parallel 







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts