Sistema Operacional Linux - Portal do Professor
Sistema Operacional Linux - Portal do Professor
Sistema Operacional Linux - Portal do Professor
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
Cadernos de Informática<br />
82<br />
CURSO DE INTRODUÇÃO AO SISTEMA OPERACIONAL LINUX<br />
Secretaria de Esta<strong>do</strong> de Educação MG<br />
Simples, não?<br />
Exercício<br />
• Imprima cada linha <strong>do</strong> arquivo (apenas os primeiros 9 campos) com os <strong>do</strong>is primeiros<br />
campos troca<strong>do</strong>s. Exemplo: um um grande grande pais pais seria impresso como grande grande grande um um pais pais. pais<br />
Você não conseguiria fazer isto com o coman<strong>do</strong> cut porque ele imprime os campos na<br />
mesma ordem em que aparecem. Você pode apenas selecionar quais campos imprimir.<br />
Outra variável que o awk define é NR que contém o número da linha corrente. Vamos<br />
numerar as linhas <strong>do</strong> arquivo citacao:<br />
mimbar:/usr/share/linux.see:55> awk “{print NR “:”, $0}’ citacao<br />
1: Um grande pais<br />
2: se faz com grandes homens.<br />
Espaços em branco (‘ ‘) são opera<strong>do</strong>res de concatenação em awk.<br />
Podemos, também, seguir cada linha com o seu comprimento:<br />
mimbar:/usr/share/linux.see:56> awk ‘{print $0 “ (“ length($0) “<br />
caracteres)”}’ citacao<br />
Um grande pais (14 caracteres)<br />
se faz com grandes homens. (26 caracteres)<br />
A função length retorna o comprimento em caracteres de seu argumento. Exemplo:<br />
length(“hoje”) retorna 4.<br />
Vamos a um exemplo que utiliza os recursos de memória <strong>do</strong> awk: imprima o comprimento<br />
da mais longa linha de um arquivo. Utilizan<strong>do</strong> o arquivo cidades como entrada:<br />
mimbar:/usr/share/linux.see:63> awk ‘BEGIN {maior=0}<br />
{if (length($0) > maior) { maior=length($0)}}<br />
END { print “A maior linha tem “ maior “ caracteres”}’ cidades<br />
A maior linha tem 39 caracteres<br />
A linha com BEGIN é executada antes da leitura <strong>do</strong> arquivo e a linha com END é executada<br />
depois da leitura <strong>do</strong> arquivo. A linha com if é executada para cada linha.<br />
Exercícios<br />
1. Modifique o script acima para imprimir também o número da linha mais longa.<br />
2. Imprima apenas a linha mais longa.<br />
3. Imprima a linha atual se ela for mais longa que todas as linhas anteriores. Ou seja,<br />
cada vez que você encontra uma linha mais longa que todas as que você viu antes você<br />
a imprime. Se a primeira linha for a mais longa de todas, você só imprime a primeira<br />
linha.<br />
4. Como você imprimiria todas as linhas <strong>do</strong> arquivo em ordem crescente de comprimento?<br />
Sugestão: utilize os recursos de composição <strong>do</strong> shell e os coman<strong>do</strong>s sort e cut.