31.07.2013 Views

Sistema Operacional Linux - Portal do Professor

Sistema Operacional Linux - Portal do Professor

Sistema Operacional Linux - Portal do Professor

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!