verificação de campos

13. Re: verificação de campos

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/04/2017 - 18:17h

Em tempo . . . .
Segue a opção em awk:
Gere o "NUM.txt":
for N in {000001..120000};do echo $N >> NUM.txt;done
cat NUM.txt
000001
.
.
.
120000
awk '{if ($1<=12) fld=";1;;;";else if($1>12 && $1<=312) fld=";;2;;";else if($1>312 && $1<=1512) fld=";;;3;";else if($1==1513) fld=";;;;4";else fld=";;;;";print $0 fld;}' NUM.txt >> NUM_SAIDA.txt 


marcelo oliver


  


14. Re: verificação de campos

Claudio Silva
claudio4p

(usa Outra)

Enviado em 28/04/2017 - 10:11h

msoliver escreveu:

claudio4p escreveu:

Olá,
tenho arquivo sequencial com 120.000 linhas que preciso colocar números de 1 a 4 em determinadas posições sendo que
eles nunca possam estar na mesma linha e se repitam na mesma linha.
Alguém pode dar uma luz ou já fez algo parecido ?
exemplo:
000001;"1";"";"";"" -> o numero 1 tem que aparecer 12 vezes nessa posição nesse arquivo de 12.000 linhas

000002;"";"2";"";"" -> o numero 2 tem que aparecer 300 vezes nessa posição nesse arquivo de 12.000 linhas

000003;"";"";"3";"" -> o numero 3 tem que aparecer 1.200 vezes nessa posição nesse arquivo de 12.000 linhas

000004;"";"";"";"4" -> o numero 4 tem que aparecer 1 vez nessa posição nesse arquivo de 12.000 linhas

Os números não podem aparecerem juntos na mesma linha no arquivo de 12.000 linhas, ex:
000005;"4";"";"";"1"
000006;"";"2";"3";"1"


Bom dia Claudio.
Considerando:
nº 1 0012 x cp1
nº 2 0300 x cp2
nº 3 1200 x cp3
nº 4 0001 x cp4
Temos um total de 1513 linhas, e as demais, como ficam?
Somente com o sequencial?
Caso positivo, segue a solução:


#!/bin/bash

for ((NL=1;NL<=120000;NL++));do
((NL<=12)) && printf "%06d;1;;;\n" $NL >> sequencial.txt
((NL>12&&NL<=312)) && printf "%06d;;2;;\n" $NL >> sequencial.txt
((NL>312 && NL<=1512)) && printf "%06d;;;3;\n" $NL >> sequencial.txt
((NL==1513)) && printf "%06d;;;;4\n" $NL >> sequencial.txt
((NL>1513)) && printf "%06d;;;;\n" $NL >> sequencial.txt
done

É gerado um arquivo de 1.3MB

att.:
marcelo oliver


Bom dia Marcelo...
Testei seu script e o resultado é quase esse... porém preciso que os números 1,2,3 e 4 apareçam no aquivo de saída de forma randômica dentro das 120 mil linhas do arquivo.
o numero sequencial continua porém os número 1,2,3 e 4 vão variar dentro das suas posições e com suas respectivas
quantidades, ex:

000001;"";"2";"";""
000015;"";"2";"";""
008000;"";"2";"";""
020001;"1";"";"";""
060001;"";"";"3";""
090003;"";"";"";"4"
100008;"";"";"3";""

atc




15. Re: verificação de campos

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/04/2017 - 13:44h

claudio4p escreveu:

msoliver escreveu:

claudio4p escreveu:

Olá,
tenho arquivo sequencial com 120.000 linhas que preciso colocar números de 1 a 4 em determinadas posições sendo que
eles nunca possam estar na mesma linha e se repitam na mesma linha.
Alguém pode dar uma luz ou já fez algo parecido ?
exemplo:
000001;"1";"";"";"" -> o numero 1 tem que aparecer 12 vezes nessa posição nesse arquivo de 12.000 linhas

000002;"";"2";"";"" -> o numero 2 tem que aparecer 300 vezes nessa posição nesse arquivo de 12.000 linhas

000003;"";"";"3";"" -> o numero 3 tem que aparecer 1.200 vezes nessa posição nesse arquivo de 12.000 linhas

000004;"";"";"";"4" -> o numero 4 tem que aparecer 1 vez nessa posição nesse arquivo de 12.000 linhas

Os números não podem aparecerem juntos na mesma linha no arquivo de 12.000 linhas, ex:
000005;"4";"";"";"1"
000006;"";"2";"3";"1"


Bom dia Claudio.
Considerando:
nº 1 0012 x cp1
nº 2 0300 x cp2
nº 3 1200 x cp3
nº 4 0001 x cp4
Temos um total de 1513 linhas, e as demais, como ficam?
Somente com o sequencial?
Caso positivo, segue a solução:


#!/bin/bash

for ((NL=1;NL<=120000;NL++));do
((NL<=12)) && printf "%06d;1;;;\n" $NL >> sequencial.txt
((NL>12&&NL<=312)) && printf "%06d;;2;;\n" $NL >> sequencial.txt
((NL>312 && NL<=1512)) && printf "%06d;;;3;\n" $NL >> sequencial.txt
((NL==1513)) && printf "%06d;;;;4\n" $NL >> sequencial.txt
((NL>1513)) && printf "%06d;;;;\n" $NL >> sequencial.txt
done

É gerado um arquivo de 1.3MB

att.:
marcelo oliver


Bom dia Marcelo...
Testei seu script e o resultado é quase esse... porém preciso que os números 1,2,3 e 4 apareçam no aquivo de saída de forma randômica dentro das 120 mil linhas do arquivo.
o numero sequencial continua porém os número 1,2,3 e 4 vão variar dentro das suas posições e com suas respectivas
quantidades, ex:

000001;"";"2";"";""
000015;"";"2";"";""
008000;"";"2";"";""
020001;"1";"";"";""
060001;"";"";"3";""
090003;"";"";"";"4"
100008;"";"";"3";""
atc


Boa tarde Claudio.
Então vamos "RANDOMIZAR" . . .
Segue:

#!/bin/bash
for ((NL=1;NL<=120000;NL++));do
((NL<=12)) && printf "1;;;\n" >> sequencia_00.txt
((NL>12&&NL<=312)) && printf ";2;;\n" >> sequencia_00.txt
((NL>312 && NL<=1512)) && printf ";;3;\n" >> sequencia_00.txt
((NL==1513)) && printf ";;;4\n" >> sequencia_00.txt
((NL>1513)) && printf ";;;\n" >> sequencia_00.txt
done
wait
shuf sequencia_00.txt >> sequencia_01.txt
wait
>sequencia_00.txt
wait
awk -F";" '{OFS=";";printf "%06d;%s;%s;%s;%s\n" ,NR,$1,$2,$3,$4}' sequencia_01.txt >> sequencia_00.txt
wait
echo -e "\n Teste de ocorrência dos Nºs 1 a 4 nos campos 2 a 5\n OBS.: O arquivo final é o \"sequencia_00.txt\""
for i in {1..4};do echo " Nº $i: $(grep -c ";$i" sequencia_00.txt)";done
echo -e "\nTERMINOU\n"


É isso.....
Se a resposta foi satisfatória e escarecedora, marque o tópico como resolvido e selecione a minha resposta como a MELHOR...

Att.:
Marcelo Oliver




16. Re: verificação de campos

Claudio Silva
claudio4p

(usa Outra)

Enviado em 28/04/2017 - 14:49h

msoliver escreveu:

claudio4p escreveu:

msoliver escreveu:

claudio4p escreveu:

Olá,
tenho arquivo sequencial com 120.000 linhas que preciso colocar números de 1 a 4 em determinadas posições sendo que
eles nunca possam estar na mesma linha e se repitam na mesma linha.
Alguém pode dar uma luz ou já fez algo parecido ?
exemplo:
000001;"1";"";"";"" -> o numero 1 tem que aparecer 12 vezes nessa posição nesse arquivo de 12.000 linhas

000002;"";"2";"";"" -> o numero 2 tem que aparecer 300 vezes nessa posição nesse arquivo de 12.000 linhas

000003;"";"";"3";"" -> o numero 3 tem que aparecer 1.200 vezes nessa posição nesse arquivo de 12.000 linhas

000004;"";"";"";"4" -> o numero 4 tem que aparecer 1 vez nessa posição nesse arquivo de 12.000 linhas

Os números não podem aparecerem juntos na mesma linha no arquivo de 12.000 linhas, ex:
000005;"4";"";"";"1"
000006;"";"2";"3";"1"


Bom dia Claudio.
Considerando:
nº 1 0012 x cp1
nº 2 0300 x cp2
nº 3 1200 x cp3
nº 4 0001 x cp4
Temos um total de 1513 linhas, e as demais, como ficam?
Somente com o sequencial?
Caso positivo, segue a solução:


#!/bin/bash

for ((NL=1;NL<=120000;NL++));do
((NL<=12)) && printf "%06d;1;;;\n" $NL >> sequencial.txt
((NL>12&&NL<=312)) && printf "%06d;;2;;\n" $NL >> sequencial.txt
((NL>312 && NL<=1512)) && printf "%06d;;;3;\n" $NL >> sequencial.txt
((NL==1513)) && printf "%06d;;;;4\n" $NL >> sequencial.txt
((NL>1513)) && printf "%06d;;;;\n" $NL >> sequencial.txt
done

É gerado um arquivo de 1.3MB

att.:
marcelo oliver


Bom dia Marcelo...
Testei seu script e o resultado é quase esse... porém preciso que os números 1,2,3 e 4 apareçam no aquivo de saída de forma randômica dentro das 120 mil linhas do arquivo.
o numero sequencial continua porém os número 1,2,3 e 4 vão variar dentro das suas posições e com suas respectivas
quantidades, ex:

000001;"";"2";"";""
000015;"";"2";"";""
008000;"";"2";"";""
020001;"1";"";"";""
060001;"";"";"3";""
090003;"";"";"";"4"
100008;"";"";"3";""
atc


Boa tarde Claudio.
Então vamos "RANDOMIZAR" . . .
Segue:

#!/bin/bash
for ((NL=1;NL<=120000;NL++));do
((NL<=12)) && printf "1;;;\n" >> sequencia_00.txt
((NL>12&&NL<=312)) && printf ";2;;\n" >> sequencia_00.txt
((NL>312 && NL<=1512)) && printf ";;3;\n" >> sequencia_00.txt
((NL==1513)) && printf ";;;4\n" >> sequencia_00.txt
((NL>1513)) && printf ";;;\n" >> sequencia_00.txt
done
wait
shuf sequencia_00.txt >> sequencia_01.txt
wait
>sequencia_00.txt
wait
awk -F";" '{OFS=";";printf "%06d;%s;%s;%s;%s\n" ,NR,$1,$2,$3,$4}' sequencia_01.txt >> sequencia_00.txt
wait
echo -e "\n Teste de ocorrência dos Nºs 1 a 4 nos campos 2 a 5\n OBS.: O arquivo final é o \"sequencia_00.txt\""
for i in {1..4};do echo " Nº $i: $(grep -c ";$i" sequencia_00.txt)";done
echo -e "\nTERMINOU\n"


É isso.....
Se a resposta foi satisfatória e escarecedora, marque o tópico como resolvido e selecione a minha resposta como a MELHOR...

Att.:
Marcelo Oliver



Olá Marcelo, testei seu script e a resposta foi essa

Teste de ocorrência dos Nºs 1 a 4 nos campos 2 a 5
OBS.: O arquivo final é o "sequencia_00.txt"
Nº 1: 203405
Nº 2: 102159
Nº 3: 66001
Nº 4: 2

TERMINOU

O conteúdo do arquivo de saída esta assim:

000001;101762;;;
000002;038031;;;
000003;094097;;;
000004;029276;;;
000005;117383;;;
000006;016965;;;
000007;089604;;;
000008;117280;;;
000009;076979;;;
000010;095508;;;

O correto seria:
Nº 1: 12
Nº 2: 300
Nº 3: 1200
Nº 4: 1
Arquivo de saída:
119970;;2;;
119971;;;;
119972;;;;

119978;;;;
119979;;;;
119980;1;;;
119981;;;;

119989;;;;
119990;;;3;
119991;;;;

119998;;;;
119999;;;;
120000;;;3;



17. Re: verificação de campos

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 28/04/2017 - 16:02h

claudio4p escreveu:
Olá Marcelo, testei seu script e a resposta foi essa

Teste de ocorrência dos Nºs 1 a 4 nos campos 2 a 5
OBS.: O arquivo final é o "sequencia_00.txt"
Nº 1: 203405
Nº 2: 102159
Nº 3: 66001
Nº 4: 2

TERMINOU

O conteúdo do arquivo de saída esta assim:

000001;101762;;;
000002;038031;;;
000003;094097;;;
000004;029276;;;
000005;117383;;;
000006;016965;;;
000007;089604;;;
000008;117280;;;
000009;076979;;;
000010;095508;;;

O correto seria:
Nº 1: 12
Nº 2: 300
Nº 3: 1200
Nº 4: 1
Arquivo de saída:
119970;;2;;
119971;;;;
119972;;;;

119978;;;;
119979;;;;
119980;1;;;
119981;;;;

119989;;;;
119990;;;3;
119991;;;;

119998;;;;
119999;;;;
120000;;;3;


Muito estranho Claudio, aqui "roda" perfeito. Debian Live 8.7
Tela final:
Teste de ocorrência dos Nºs 1 a 4 nos campos 2 a 5
OBS.: O arquivo final é o "sequencial_00.txt"
Nº 1: 12
Nº 2: 300
Nº 3: 1200
Nº 4: 1

TERMINOU


Vamos lá:

1º como está executando o script?

2º Qual o seu "BASH"
echo $BASH_VERSION

3º Mostra algum erro, durante a execução?

No aguardo
mso


18. Re: verificação de campos

Claudio Silva
claudio4p

(usa Outra)

Enviado em 08/05/2017 - 09:00h

msoliver escreveu:

claudio4p escreveu:
Olá Marcelo, testei seu script e a resposta foi essa

Teste de ocorrência dos Nºs 1 a 4 nos campos 2 a 5
OBS.: O arquivo final é o "sequencia_00.txt"
Nº 1: 203405
Nº 2: 102159
Nº 3: 66001
Nº 4: 2

TERMINOU

O conteúdo do arquivo de saída esta assim:

000001;101762;;;
000002;038031;;;
000003;094097;;;
000004;029276;;;
000005;117383;;;
000006;016965;;;
000007;089604;;;
000008;117280;;;
000009;076979;;;
000010;095508;;;

O correto seria:
Nº 1: 12
Nº 2: 300
Nº 3: 1200
Nº 4: 1
Arquivo de saída:
119970;;2;;
119971;;;;
119972;;;;

119978;;;;
119979;;;;
119980;1;;;
119981;;;;

119989;;;;
119990;;;3;
119991;;;;

119998;;;;
119999;;;;
120000;;;3;


Muito estranho Claudio, aqui "roda" perfeito. Debian Live 8.7
Tela final:
Teste de ocorrência dos Nºs 1 a 4 nos campos 2 a 5
OBS.: O arquivo final é o "sequencial_00.txt"
Nº 1: 12
Nº 2: 300
Nº 3: 1200
Nº 4: 1

TERMINOU


Vamos lá:

1º como está executando o script?

2º Qual o seu "BASH"
echo $BASH_VERSION

3º Mostra algum erro, durante a execução?

No aguardo
mso


Olá, desculpe a demora em responder... Vamos lá...
Eu simplesmente copiei e colei seu script num arquivo teste03.sh, rodei dos2unix...
Este arquivo teste03.sh está na mesma paste que o meu arquivo sequencial de 000001a120000.
Eu estou executando assim: $ teste3.sh
A versão do meu bash é 3.2.25(1)-release



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts