Olá Jeferson e Julio,
neste linha: Tudo=$(sed 's/ //g;s/\([0-9]\)/\1\n/g' <<< $Tudo)
sabemos que tudo o que sobra são números e, pelos meus testes, substituir
[0-9] por . melhora 40% a performance (deste comando, não do todo).
A explicação seria não ter que verificar se o digito está entre 0 e 9,
Falou Marcelo,
logo após enviar para a lista o script, me ocorreu a mesma ideia, porém
juntando as 2 linhas, e o prg ficaria assim:
Tudo=$(seq $1 $2 | sed 's/ //g;s/\(.\)/\1\n/g')
sort -n <(echo "$Tudo") | uniq -c | awk '{print $2" = "$1}'
Mas o que me deixa idiotizado é o fato do seq ter sido ma
Opa! Deu diferença mesmo!
Engraçado que apesar de não estarmos lidando com um scrip que
necessariamente dependa da velocidade, as técnicas de otimização
utilizadas aqui irão trazer ganhos em diversos outros scripts.
O último script tinha esses tempos, de 1 à 10:
real0m2.938s
user0m2.49
Fala galera,
Estou com o seguinte problema:
Tenho um arquivo com muitas linhas, eu procuro uma determinada string dentro
desse arquivo, achando a string eu coloco no final da linha isso: 'DD.MM.'.
Ex:
Linha original: DT_ALTER POSITION (31:40) DATE EXTERNAL (10)
Linha alterada: DT_ALTER
Pois é, julio, se eu falar de anilhas pro meu pai, a resposta vai ser
a mesma...rs
Essa ideia do seq -w é interessante, vou colocar como switch no script.
Só pra gente fechar (até que alguem venha com mais uma otimização :-D ):
Juntando tudo em apenas 2 linhas:
real0m1.961s
user0m1.712s
use o sed, uma lista e um retrovisor
sed "s/\(DT_ALTER POSITION(31:40) DATE EXTERNAL (10)\)/\1 DD\.MM\./g
Coloque entre \( e \) a string desejada, depois substitua por \1 e o
complemento desejado. Feito isso, o sed vai repetir o texto e adicionar o
sufixo q vc deseja.
2010/1/17 Jefferso
Olá,
Estou tentando evitar um loop dentro de loop, pois tenho 2 arquivos
carros.txt:
---
palio
corsa
vectra
gol
---
cores.txt
---
branco
verde
preto
cinza
---
E eu queria a seguinte saída:
palio branco
palio verde
palio preto
palio cinza
corsa branco
corsa verde
Expansão de chaves, meu amigo:
$ echo {palio,corsa,vectra,gol}' '{branco,verde,branco,cinza}
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
2010/1/17 Jeferson Sant
sed '/string/s/$/incremento/' arquivo
Abraços,
Julio
Cursos de Shell e Zenity em 2 fins de semana?
- Em SP ligue (11)2125-4747;
- Em DF ligue (61) 3223-3000;
- Turmas fechadas em outras cidades ligue (21) 8112-9988.
2010/1/17 Jefferson Aredes
>
>
> Fala galera,
>
> Estou com o seguinte problem
Olá Jeferson,
só um comentário sobre sua afirmação de que loops devem ser evitados.
Por exemplo:
seq 1 1000
for i in $(seq 1 1000); do echo $i; done
o segundo é mais lento que o primeiro (fica mais notável se aumentarmos o
1000).
Mas, até onde sei, o segundo irá executar 1000 vezes o programa ech
Hehehehehe! Grande Julio!
Aprendi shell lá no seu bar, hehehe.. ;)
Acho que a diferença vem do seguinte:
No eval com echo, estamos executando um: echo {1..10}, que é o mesmo que
echo 1 2 3 4 5 ... 10.
Desta maneira, a expansão em chaves irá ter que gerar a string com esses
números todos (q
Olá Julio,
Eu fiz com esse comando
cat arquivo | sed '/<\/DocumentPropertie s>/G' | sed 's/^$/Exemplo< \/Title>/g' | sed '/<\/Menu>/G' | sed 's/^$/<\/Menu>/g'
Segue o conteúdo do arquivo:
~ $ cat arquivo
7.10< /Version>
Atualizac oes
Actualiza ciones
Updates< /Title>
Segue o resu
Fala Marcelo,
o que vc explicou é perfeitamente compreensível e concordo totalmente
contigo, porém a diferença de tempo entre a expansão de chaves e a execução
do seq, para números não muito grandes (tipo 2000) é pequena. Para números
pequenos, as chaves ganham e para números grandes o seq ganha (p
13 matches
Mail list logo