<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog do Beraldo &#187; AWK</title>
	<atom:link href="http://www.rberaldo.com.br/blog/tag/awk/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rberaldo.com.br/blog</link>
	<description>Programação, Música, Entretenimento e o que mais me vier à mente</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:23:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>O comando SED do Linux</title>
		<link>http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/</link>
		<comments>http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/#comments</comments>
		<pubDate>Fri, 15 Oct 2010 23:09:22 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[AWK]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[comando]]></category>
		<category><![CDATA[filtragem]]></category>
		<category><![CDATA[filtro]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[stream]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/?p=241</guid>
		<description><![CDATA[A ferramenta SED, junto ao AWK, são as duas principais linguagens para manipulação de arquivos e streams do Linux.]]></description>
			<content:encoded><![CDATA[<p>A ferramenta SED, junto ao AWK, são as duas principais linguagens para manipulação de arquivos e <em>streams</em> do Unix/Linux. Ambas possuem vasta abrangência e o que uma não pode fazer, a outra provavelmente o fará.</p>
<p>Com o SED é possível substituir e &#8220;casar&#8221; padrões, sempre por meio de Expressões Regulares, outra grande ferramenta do mundo da Computação.</p>
<p><span id="more-241"></span></p>
<p>O SED, assim como o AWK, lê um arquivo, linha por linha, e aplica a expressão do parâmetro a cada uma delas.</p>
<p>A sintaxe do SED é a seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'expressão'</span> arquivo</pre></div></div>

<p>É possível filtrar a saída de outro comando, em vez de filtrar um arquivo, usando pipe. Usarei saídas do comando echo para explicar o sed.</p>
<p>SED usa Expressões Regulares (ER&#8217;s). Se você não conhece ER&#8217;s, sugiro ler o <a href="http://guia-er.sourceforge.net" target="_blank" onclick="urchinTracker('/outgoing/guia-er.sourceforge.net?referer=');">Expressões Regulares &#8211; Guia de Consulta Rápida</a></p>
<p><a href="#comm_s">1. Substituindo textos: comando s</a><br />
<a href="#delim">1.1. Escapando o delimitador</a><br />
<a href="#retro">1.2. Usando a expressão casada em ER na substituição</a><br />
<a href="#retro2">1.3 Usando &#8220;retrovisores&#8221; (\1, \2&#8230;)</a><br />
<a href="#mods">2. Modificadores</a><br />
<a href="#mod_g">2.1. Modificador &#8220;g&#8221;: tratar linha inteira</a><br />
<a href="#mod_p">2.2. Modificador &#8220;p&#8221;: exibir na tela</a><br />
<a href="#limit_linha">3. Restringindo por linhas</a><br />
<a href="#limit_pattern">4. Restringindo por padrões</a><br />
<a href="#comm_d">5. Remover linha: comando d</a><br />
<a href="#comm_q">6. Sair: comando q</a><br />
<a href="#comm_a">7. Adicionando linha: comando &#8220;a&#8221;</a><br />
<a href="#comm_i">8. Adicionando linha: comando &#8220;i&#8221;</a><br />
<a href="#comm_c">9. Mudando uma linha: comando c</a><br />
<a href="#links">10. Links</a></p>
<h2><a name="comm_s">1. Substituindo textos: comando s</a></h2>
<p>Sintaxe: <strong>s/ER/sub/[modificadores]</strong>: Substitui os padrões &#8220;casados&#8221; em &#8220;ER&#8221; por &#8220;sub&#8221;.</p>
<p>A utilidade mais conhecida do SED é a substituição de textos. Para isso, usamos o comando &#8220;s&#8221; do sed:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tutorial sobre sed: aprenda a trabalhar com sed&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/sed/awk/'</span></pre></div></div>

<p>A saída será: <strong>Tutorial sobre awk: aprenda a trabalhar com sed</strong>. Note que a última ocorrência de &#8220;sed&#8221; não foi modificada. Isso porque o sed faz a modificação na primeira ocorrência e, em seguida, já procura pelo padrão na linha seguinte, se houver. Para que o sed execute a ação na linha toda, usamos o modificador &#8220;g&#8221;:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Tutorial sobre sed: aprenda a trabalhar com sed&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/sed/awk/g'</span></pre></div></div>

<p>Agora a saída é a esperada: <strong>Tutorial sobre awk: aprenda a trabalhar com awk</strong>.</p>
<p>Os modificadores serão abordados com mais detalhes logo mais abaixo. Não percam! =P</p>
<h3><a name="delim">1.1. Escapando o delimitador</a></h3>
<p>Como estamos usando a barra (/) como delimitador, se quisermos usar esse caractere na ER ou na substituição, temos de escapá-lo, com barra invertida:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;o arquivo /proc/cpuinfo possui informações importantes&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'s/\/proc\/cpuinfo/\/etc\/passwd/'</span></pre></div></div>

<p>Saída: <strong>o arquivo /etc/passwd possui informações importantes</strong></p>
<h3><a name="retro">1.2. Usando a expressão casada em ER na substituição</a></h3>
<p>Às vezes queremos acrescentar algo ao texto original. Por isso, é preciso que tenhamos o texto casado na ER. Para isso, usamos o caractere &amp; para nos referirmos à expressão casada pela ER.</p>
<p>Suponhamos que queremos colocar todos os caminhos de arquivos entre aspas. Para isso:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;o arquivo /proc/cpuinfo possui informações importantes <span style="color: #000099; font-weight: bold;">\n</span>Este tutorial está em /home/beraldo/tutoriais. Há muitos outros nesse diretório&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/(\/[^ .,]*)+/&quot;&amp;amp;&quot;/'</span></pre></div></div>

<p>Saída:<br />
o arquivo &#8220;/proc/cpuinfo&#8221; possui informações importantes<br />
Este tutorial está em &#8220;/home/beraldo/tutoriais&#8221;. Há muitos outros nesse diretório</p>
<p>A opção &#8220;-r&#8221; usa o padrão estendido de expressões regulares &#8211; o mesmo usado por &#8220;egrep&#8221;. Isso possibilita o uso da lista negada.</p>
<h3><a name="retro2">1.3 Usando &#8220;retrovisores&#8221; (\1, \2&#8230;)</a></h3>
<p>Muitas vezes queremos substituir partes de um texto, mas manter outras. Para isso, podemos usar os &#8220;retrovisores&#8221;, que inserem na string final os padrões casados na ER inseridos em grupos (<strong>(</strong> e <strong>)</strong>). O primeiro grupo casado é referenciado por \1, o segundo, por \2 e assim sucessivamente, até \9.</p>
<p>Por exemplo, vamos manter apenas a primeira palavra de cada linha do texto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;primeira linha<span style="color: #000099; font-weight: bold;">\n</span>segunda linha<span style="color: #000099; font-weight: bold;">\n</span>terceira linha&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/^([a-z]+).*/\1/g'</span></pre></div></div>

<p><strong>Importante:</strong> Para usar os retrovisores, é necessário usar a opção -r do sed, que ativa o padrão estendido de ERs.</p>
<h2><a name="mods">2. Modificadores</a></h2>
<h3><a name="mod_g">2.1. Modificador &#8220;g&#8221;: tratar linha inteira</a></h3>
<p>Já vimos o modificador g anteriormente, que serve para forçar o SED a aplicar a expressão na linha inteira.</p>
<p>É possível associar um número ao modificador &#8220;g&#8221;, para fazer com que o SED atue apenas a partir de uma determinada ocorrência do padrão.<br />
Por exemplo, vamos substituir por NULL todas as palavraas do texto:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;palavra1 palavra2 palavra3&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/([a-zA-Z0-9]+)/NULL/g'</span></pre></div></div>

<p>Vamos supor que gostaríamos de remover todas as ocorrências, exceto a primeira. Para isso executaríamos o sed assim:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;palavra1 palavra2 palavra3&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'s/([a-zA-Z0-9]+)/NULL/2g'</span></pre></div></div>

<p>O &#8220;2&#8243; faz com que a substituição ocorra apenas a partir da segunda ocorrência do padrão.</p>
<h3><a name="mod_p">2.2. Modificador &#8220;p&#8221;: exibir na tela</a></h3>
<p>Por padrão, o SED imprime na saída padrão todas as linhas lidas &#8211; e modificadas. A opção -n impede que o sed faça a impressão das linhas. É nessa situação que o modificador &#8220;p&#8221; é útil. Quando quisermos imprimir somente as linhas alteradas pelo SED, usaremos o modificador &#8220;p&#8221;.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;linha sem números <span style="color: #000099; font-weight: bold;">\n</span>Linha com números: 1 2 3 4 5 6 <span style="color: #000099; font-weight: bold;">\n</span>Linha com mais números 42 81&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'s/[0-9]+/X/gp'</span></pre></div></div>

<p>Serão mostradas apenas as linhas que casaram com o padrão.</p>
<p>Como foi possível ver no exemplo acima, é possível misturar os modificadores.</p>
<h2><a name="limit_linha">3. Restringindo por linhas</a></h2>
<p>E possível fazer o SED atuar somente num intervalo de linhas.</p>
<p>Vamos mostrar os dez primeiros usuários do sistema, listando as dez primeiras linhas do arquivo /etc/passwd.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'1,10 s/([^:]+).*/\1/p'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<p>Note a opção -n e o modificador &#8220;p&#8221;, para mostrar somente o padrão casado.</p>
<p>É possível usar o caractere $ (cifrão) para se referir à última linha do arquivo:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">'1,$ s/([^:]+).*/\1/p'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<h2><a name="limit_pattern">4. Restringindo por padrões</a></h2>
<p>Além de restringir por número de linhas, podemos restringer por padrão:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;esta<span style="color: #000099; font-weight: bold;">\n</span>é<span style="color: #000099; font-weight: bold;">\n</span>uma<span style="color: #000099; font-weight: bold;">\n</span>linha<span style="color: #000099; font-weight: bold;">\n</span>usada<span style="color: #000099; font-weight: bold;">\n</span>para<span style="color: #000099; font-weight: bold;">\n</span>testar<span style="color: #000099; font-weight: bold;">\n</span>o<span style="color: #000099; font-weight: bold;">\n</span>comando<span style="color: #000099; font-weight: bold;">\n</span>sed&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span>  <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'/uma/,/comando/s/[ae]/X/g'</span></pre></div></div>

<h2><a name="comm_d">5. Remover linha: comando d</a></h2>
<p>O comando &#8220;d&#8221; do sed remove linhas.<br />
Vamos remover as dez primeiraas linhas de /etc/passwd:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'1,10 d'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<h2><a name="comm_q">6. Sair: comando q</a></h2>
<p>O comando &#8220;q&#8221; faz o sed parar após encontrar o padrão</p>
<p>Imprime as dez primeiras linhas de /etc/passwd</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #ff0000;">'10 q'</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span></pre></div></div>

<p>Para após encontrar um número:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ q'</span></pre></div></div>

<h2><a name="comm_a">7. Adicionando linha: comando &#8220;a&#8221;</a></h2>
<p>É possível inserir linha após achar um padrão:</p>
<p>Insere linha após uma linha que contenha número</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ a Oi. Sou novo aqui'</span></pre></div></div>

<h2><a name="comm_i">8. Adicionando linha: comando &#8220;i&#8221;</a></h2>
<p>Quase igual ao comando &#8220;a&#8221;, mas insere a nova linha antes da linha casada com o padrão</p>
<p>Insere linha antes de uma linha que contenha número</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ i Oi. Sou novo aqui'</span></pre></div></div>

<h2><a name="comm_c">9. Mudando uma linha: comando c</a></h2>
<p>Semelhante a &#8220;a&#8221; e &#8220;i&#8221;, mas muda a linha que casou com o padrão</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">&quot;sou uma linha<span style="color: #000099; font-weight: bold;">\n</span>sou outra linha<span style="color: #000099; font-weight: bold;">\n</span>esta linha tem número 1<span style="color: #000099; font-weight: bold;">\n</span>esta já não tem número&quot;</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">sed</span> <span style="color: #660033;">-r</span> <span style="color: #ff0000;">'/[0-9]+/ c Fui modificado'</span></pre></div></div>

<h2><a name="links">10. Links</a></h2>
<p><a href="http://www.grymoire.com/Unix/Sed.html" onclick="urchinTracker('/outgoing/www.grymoire.com/Unix/Sed.html?referer=');">http://www.grymoire.com/Unix/Sed.html</a><br />
<a href="http://www.zago.eti.br/script/sed.html" onclick="urchinTracker('/outgoing/www.zago.eti.br/script/sed.html?referer=');">http://www.zago.eti.br/script/sed.html</a><br />
<a href="http://www.linuxmanpages.com/man1/sed.1.php" onclick="urchinTracker('/outgoing/www.linuxmanpages.com/man1/sed.1.php?referer=');">http://www.linuxmanpages.com/man1/sed.1.php</a><br />
<a href="http://guia-er.sourceforge.net/" onclick="urchinTracker('/outgoing/guia-er.sourceforge.net/?referer=');">http://guia-er.sourceforge.net/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/o-comando-sed-do-linux/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Tutorial AWK</title>
		<link>http://www.rberaldo.com.br/blog/tutorial-awk/</link>
		<comments>http://www.rberaldo.com.br/blog/tutorial-awk/#comments</comments>
		<pubDate>Thu, 07 May 2009 12:27:00 +0000</pubDate>
		<dc:creator>Beraldo</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Shell Script (Bash)]]></category>
		<category><![CDATA[AWK]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Programação Shell]]></category>
		<category><![CDATA[Shell]]></category>

		<guid isPermaLink="false">http://www.rberaldo.com.br/blog/2009/05/07/tutorial-awk/</guid>
		<description><![CDATA[Não sou nenhum expert ou grande conhecedor da linguagem AWK, mas ela é muito útil e me ajudou muito nas provas sobre Shell Script na faculdade. Por isso resolvi escrever este pequeno e introdutório tutorial acerca dessa linguagem. É bom todo usuário Linux saber usá-la. =) AWK é uma linguagem utilizada para processamento de informações [...]]]></description>
			<content:encoded><![CDATA[<p>Não sou nenhum <em>expert</em> ou grande conhecedor da linguagem AWK, mas ela é muito útil e me ajudou muito nas provas sobre Shell Script na faculdade. Por isso resolvi escrever este pequeno e introdutório tutorial acerca dessa linguagem. É bom todo usuário Linux saber usá-la. =)</p>
<p>AWK é uma linguagem utilizada para processamento de informações em texto, como o conteúdo de um arquivo &#8211; principalmente informações em colunas &#8211; ou a saída de outros comandos, como <strong>cat</strong>, <strong>grep</strong> etc.</p>
<p><span id="more-15"></span><br />
A estrutura de um script AWK (pode estar em um arquivo ou ser escrito diretamente na linha de comando &#8211; Shell) é a seguinte:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">BEGIN<span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comandos executados ao iniciar o processamento, antes de ler <span style="color: #c20cb9; font-weight: bold;">as</span> linhas <span style="color: #000000; font-weight: bold;">do</span> texto
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
<span style="color: #7a0874; font-weight: bold;">&#91;</span>condicao<span style="color: #7a0874; font-weight: bold;">&#93;</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comandos a serem executados em todas <span style="color: #c20cb9; font-weight: bold;">as</span> linhas <span style="color: #000000; font-weight: bold;">do</span> texto
<span style="color: #7a0874; font-weight: bold;">&#125;</span>
&nbsp;
END<span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comando final. Executado após o processamento de todas <span style="color: #c20cb9; font-weight: bold;">as</span> linhas
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>A condição do segudo bloco é opcional. Se não especificada, os respectivos comandos do bloco serão executados em todas as linhas. Caso contrário, serão executados apenas nas linhas que satisfizerem a condição.<br />
A condição pode ser uma expressão regular. Basta colocá-la entre barras:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">/</span>^A<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#123;</span>
 Comando...
<span style="color: #7a0874; font-weight: bold;">&#125;</span></pre></td></tr></table></div>

<p>Se um bloco de comandos estiver vazio, é executado <strong>print $0</strong>, ou seja, imprime a linha corrente.</p>
<p>Algumas variáveis definidas no AWK:</p>
<p>FS -> separador de campos<br />
NR -> número da linhas<br />
NF -> número de campos na linha</p>
<p>Para mais informações:</p>
<p>Manpage do AWK: <a href="http://www.linuxmanpages.com/man1/awk.1.php" target="_blank" onclick="urchinTracker('/outgoing/www.linuxmanpages.com/man1/awk.1.php?referer=');"><strong>$ man awk</strong></a><br />
<a href="http://www.gnu.org/software/gawk/manual/gawk.html" target="_blank" onclick="urchinTracker('/outgoing/www.gnu.org/software/gawk/manual/gawk.html?referer=');">http://www.gnu.org/software/gawk/manual/gawk.html</a><br />
<a href="http://en.wikipedia.org/wiki/Awk" target="_blank" onclick="urchinTracker('/outgoing/en.wikipedia.org/wiki/Awk?referer=');">http://en.wikipedia.org/wiki/Awk</a></p>
<p>Exemplos:</p>
<p>Filtra  as linhas com o padrão especificado. Linhas que terminam com conf</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #000000; font-weight: bold;">/</span>conf$<span style="color: #000000; font-weight: bold;">/</span></pre></td></tr></table></div>

<p>Usando outro separador de campos e imprimindo colunas</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> -F: <span style="color: #ff0000;">'{print $1}'</span></pre></td></tr></table></div>

<p>Usando separador de campos</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print $1 FS $8}'</span></pre></td></tr></table></div>

<p>Numerando linhas</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{print NR FS$1 FS $8}'</span></pre></td></tr></table></div>

<p>Filtra linhas com padrão especificado e mostra apenas as colunas 1 e 8.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'/conf$/{print $1&quot; &quot;$8}'</span></pre></td></tr></table></div>

<p>Imprime as linhas com mais de 3 campos. Elimina a primeira linha do ls -l (Total)</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'NF &gt; 3'</span></pre></td></tr></table></div>

<p>Filtra linhas com arquivos cujos nomes possuem menos de 5 caracteres</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'length($8) &lt; 5'</span></pre></td></tr></table></div>

<p>Imprime linhas pares</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'NR % 2 == 0 {print NR&quot; &quot;$0}'</span></pre></td></tr></table></div>

<p>Substitui strings</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{sub(/conf$/,&quot;test&quot;); print $0}'</span></pre></td></tr></table></div>

<p>Procura expressão em determinado campo</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">/</span>etc <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'$8 ~ /^[ae]/'</span></pre></td></tr></table></div>

<p>Inserindo strings entre campos</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #000000; font-weight: bold;">/</span>etc<span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">passwd</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> -F: <span style="color: #ff0000;">'{print &quot;Login: &quot; $1}'</span></pre></td></tr></table></div>

<p>Filtra  a saída de <strong>ls -l</strong>, a fim de mostrar o nome do arquivo, suas permissões e seu tamanho (a condição <strong>NR != 1</strong> evita que a linha <strong>Total</strong> seja exibida):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #660033;">-l</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'NR != 1{print &quot;Nome: &quot;$8&quot; Perm: &quot;$1&quot; Tamanho: &quot;$5}'</span></pre></td></tr></table></div>

<p>Imprime o comprimento da maior linha</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'{ if (length($0) &gt; max) max = length($0)}; END { print max}'</span>; arquivo</pre></td></tr></table></div>

<p>Imprime as linhas com mais de 42 caracteres</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'length($0) &gt; 42'</span> arquivo</pre></td></tr></table></div>

<p>Exibe o número de linhas do arquivo</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #ff0000;">'END { print NR }'</span> arquivo</pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.rberaldo.com.br/blog/tutorial-awk/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

