AprendiNoLinux 
		 
		(usa Ubuntu)
		 
		Enviado em 25/05/2012 - 19:59h 
		gellox escreveu: 
 
Vlw pela resposta novamente, 
 
quanto ao video não tenho como ver estou no trabalho e é bloqueado, 
mas é isso mesmo quero pegar em todo o arquivo e em cada linha a posição 10 até a 20 por exemplo  
como se fizesse um cut -c 10-20 para cada linha, pq ai não vai me interessar se na linha tem ou não espaço. 
ok. 
Então para provar o funcionamento, alterei o seu bloco e assim conseguir visualizar. 
Chamei este arquivo de 
texto.txt 
 
1234567890xxxxxxxxxx1234567890123456789012345678901234567890 
0987654321yyyyyyyyyy0987654321098765432109876543210987654321 
6543210987zzzzzzzzzz6543210987654321098765432109876543215646 
321098765432109876543210987654321098765432109876543214535445 
098765432109876543210987654321098765432109876543213543545435 
543210987654321098765432109876543210987654321098765432178798 
1234567890xxxxxxxxxx1234567890123456789012345678901234567890 
0987654321yyyyyyyyyy0987654321098765432109876543210987654321 
6543210987zzzzzzzzzz6543210987654321098765432109876543215646 
098765432109876543210987654321098765432167545468784444548454 
654321098765432109876543210987654321098765432109876543214543 
987654321098765432109876543210987654321098765432165454545435 
1234567890xxxxxxxxxx1234567890123456789012345678901234567890 
0987654321yyyyyyyyyy0987654321098765432109876543210987654321 
6543210987zzzzzzzzzz6543210987654321098765432109876543215646 
876543210987654321098765432109876543210987654321784312413543 
098765432109876543210987654321098765432109876543215435484344 
1234567890xxxxxxxxxx1234567890123456789012345678901234567890 
0987654321yyyyyyyyyy0987654321098765432109876543210987654321 
6543210987zzzzzzzzzz6543210987654321098765432109876543215646 
 
Caso eu tenha entendido errado me avisa. 
Marquei com xxxxx, yyyy e zzzzz a posição 11 até 20 e aí você poderá regular da forma que quiser. 
O comando:
 
 
sed 's/.\{20\}/&§/ ; s/§.*// ; s/.\{10\}//' 
 
 
Podem ter outras formas de fazer, mas foi assim que consegui resolver em 3 partes. 
Para você medir a velocidade em um arquivo grande use antes o comando 
time 
 
time sed 's/.\{20\}/&§/ ; s/§.*// ; s/.\{10\}//' < texto.txt 
  
Fazendo assim vc terá o resultado na tela: Provando que funcionou e no final o tempo para você comparar com o 
cut  ou 
awk 
 
xxxxxxxxxx 
yyyyyyyyyy 
zzzzzzzzzz 
3210987654 
0987654321 
5432109876 
xxxxxxxxxx 
yyyyyyyyyy 
zzzzzzzzzz 
0987654321 
6543210987 
9876543210 
xxxxxxxxxx 
yyyyyyyyyy 
zzzzzzzzzz 
8765432109 
0987654321 
xxxxxxxxxx 
yyyyyyyyyy 
zzzzzzzzzz 
real	0m0.002s 
user	0m0.000s 
sys	0m0.000s 
 
Não testei com o comando 
tr , mas suspeito que igual ao 
cut  ou 
awk  façam o mesmo loop dentro da linha na memória como o 
sed  está fazendo. 
Vou te explicar o que está acontecendo no comando. 
     
 sed  
 
's/ = substituir  
.\{20\}/&§/ ; = até a posição 20 adicionando um caracter especial. Neste caso §  e o &  faz retornar o que casou, 20 caracteres.  
s/§.*// ; = substitua a partir do caracter especial §  tudo por nada. Ou seja, remove tudo depois do danado.  
s/.\{10\}//' = substitua as primeiras 10 posições por nada. Vai sobrar somente os 10 que você deseja.  
< texto.txt = O arquivo que vc já tem salvo com o grande texto/bloco.  
  
Caso vc queira gerar um arquivo de saída, faça no final > seuarquivo.txt
exemplo:
 
time sed 's/.\{20\}/&§/ ; s/§.*// ; s/.\{10\}//' < texto.txt > seuarquivo.txt 
  
Se vc quiser a posição 15 até 35. É só mudar {20\} por {35\} e {10\} por {15\} 
Sempre fiz este tipo de construção usando o bloco inteiro. Este ficou mais complicado porque precisei cortar o bloco que não interessa. 
Caso a sua intenção seja de usar os 10 primeiros aí fica super fácil. Salve o resultado do que sobrou dos 10 primeiros e vá fazendo isso até acabar com todos eles. 
Espero que tenha ajudado. ;) 
Agora é bom estudar o 
sed  porque ele é um canivete suiço tão bom quanto o 
awk 
Detalhe: Por que o sed é mais rápido do que o cut ou awk ? Ele vai carregando o arquivo e processando a linha com o resultado. Os demais carregam o arquivo e só depois começam a aplicar os loops e gsub strings. Pelo menos foi a dedução que fiz.