<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Marco Maggi's Oracle Tips &#38; Drafts</title>
	<atom:link href="http://mmoracletips.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mmoracletips.wordpress.com</link>
	<description>Raccolta di appunti sul mondo dei database Oracle</description>
	<lastBuildDate>Thu, 01 Oct 2009 10:38:31 +0000</lastBuildDate>
	<language>it</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mmoracletips.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Marco Maggi's Oracle Tips &#38; Drafts</title>
		<link>http://mmoracletips.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mmoracletips.wordpress.com/osd.xml" title="Marco Maggi&#039;s Oracle Tips &#38; Drafts" />
	<atom:link rel='hub' href='http://mmoracletips.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Manipolazione di files con UNIX</title>
		<link>http://mmoracletips.wordpress.com/2009/07/08/manipolazione-di-files-con-unix/</link>
		<comments>http://mmoracletips.wordpress.com/2009/07/08/manipolazione-di-files-con-unix/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 13:35:05 +0000</pubDate>
		<dc:creator>mmaggi75</dc:creator>
				<category><![CDATA[Unix]]></category>
		<category><![CDATA[cat]]></category>
		<category><![CDATA[echo]]></category>
		<category><![CDATA[expr index]]></category>
		<category><![CDATA[file]]></category>
		<category><![CDATA[grep]]></category>
		<category><![CDATA[head]]></category>
		<category><![CDATA[mailx]]></category>
		<category><![CDATA[sed]]></category>
		<category><![CDATA[stringhe]]></category>
		<category><![CDATA[substring]]></category>
		<category><![CDATA[tail]]></category>

		<guid isPermaLink="false">http://mmoracletips.wordpress.com/?p=1040</guid>
		<description><![CDATA[&#160; Consideriamo un file processing.log e supponiamo di doverlo parsare per controllare se si siano verificati degli errori. Una soluzione pure-database vedrebbe una procedura che legga il file dalla cartella in esame ed effettui una lettura sequenziale ricercando i pattern desiderati. Dovremmo prima referenziare la cartella con un oggetto DIRECTORY, assegnare i GRANT in lettura [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mmoracletips.wordpress.com&amp;blog=7626263&amp;post=1040&amp;subd=mmoracletips&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<table border="0">
<tr>
<td style="height:10px;">&nbsp;</td>
</tr>
</table>
<p>Consideriamo un file <i>processing.log</i> e supponiamo di doverlo parsare per controllare se si siano verificati degli errori.</p>
<ul>
<li>
Una soluzione <i>pure-database</i> vedrebbe una procedura che legga il file dalla cartella in esame ed effettui una lettura sequenziale ricercando i pattern desiderati. Dovremmo prima referenziare la cartella con un oggetto DIRECTORY, assegnare i GRANT in lettura ed utilizzare il package UTL_FILE per accedere al file.<br />
<code>&nbsp;</code>
</li>
<li>
Una soluzione più veloce, adatta ai sistemi UNIX, è quella di sfruttare i comandi nativi del sistema operativo.<br />
Posto che il contenuto del log sia:<br />
<code><br />
Start processing at 07/07/2009 18:39:40<br />
Operation type = LOADING<br />
Archiving old records<br />
Loading new records<br />
Total records = 131.000<br />
Updating tables<br />
End processing, result code = 145<br />
</code><br />
Un semplice script <i>parse.sh</i> potrebbe essere:<br />
<code><br />
#!/bin/bash<br />
FILE=processing.log</p>
<p># Leggo il tipo dalla seconda riga<br />
LINE=`sed -n 2p $FILE`<br />
IDX=`expr index "$LINE" =`<br />
TYPE=`echo ${LINE:$IDX}`</p>
<p># Cerco una riga e la elaboro<br />
LINE=`cat $FILE | grep "Total records"`<br />
IDX=`expr index "$LINE" =`<br />
RECORDS=`echo ${LINE:$IDX}`</p>
<p># Leggo il return code dall'ultima riga<br />
LINE=`tail -1 processing.log`<br />
IDX=`expr index "$LINE" =`<br />
STATUS=`echo ${LINE:$IDX}`</p>
<p>if [ $STATUS -ne 0 ]; then<br />
&nbsp;&nbsp;echo "No records loaded" | mailx -s "$TYPE error" mmaggi75@gmail.com -- -r from@staff.it<br />
else<br />
&nbsp;&nbsp;echo "$RECORDS loaded" | mailx -s "$TYPE success" mmaggi75@gmail.com -- -r from@staff.it<br />
fi<br />
</code><br />
Ecco alcuni spunti interessanti:</p>
<ul>
<li>l&#8217;utilizzo del comando <strong>sed</strong> per estrarre la seconda riga del file;</li>
<li>l&#8217;utilizzo combinato dei comandi <strong>cat</strong> e <strong>grep</strong> per estrarre una riga che segua un pattern di ricerca;</li>
<li>l&#8217;utilizzo di <strong>tail</strong> per accedere all&#8217;ultima riga del file;</li>
<li>l&#8217;estrazione di una sottostringa attraverso l&#8217;uso di <strong>echo</strong> con un indice calcolato mediante il comando <strong>expr index</strong>.</li>
</ul>
<p>Al termine del parsing viene fatto un controllo e viene inviata una mail di riepilogo, sfruttando il <strong>mailx</strong> di UNIX.
</li>
</ul>
<table border="0">
<tr>
<td style="height:30px;">&nbsp;</td>
</tr>
</table>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mmoracletips.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mmoracletips.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mmoracletips.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mmoracletips.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mmoracletips.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mmoracletips.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mmoracletips.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mmoracletips.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mmoracletips.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mmoracletips.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mmoracletips.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mmoracletips.wordpress.com/1040/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mmoracletips.wordpress.com/1040/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mmoracletips.wordpress.com/1040/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mmoracletips.wordpress.com&amp;blog=7626263&amp;post=1040&amp;subd=mmoracletips&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mmoracletips.wordpress.com/2009/07/08/manipolazione-di-files-con-unix/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7645cf4a4e238c53fe0cc931b203d2d6?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mmaggi75</media:title>
		</media:content>
	</item>
	</channel>
</rss>
