<?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>Docs Jmini &#187; awk</title>
	<atom:link href="http://docs.jmini.fr/mot-cle/awk/feed" rel="self" type="application/rss+xml" />
	<link>http://docs.jmini.fr</link>
	<description>docs.jmini.fr</description>
	<lastBuildDate>Thu, 18 Feb 2010 09:47:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Un script pour convertir un fichier CSV en requêtes SQL</title>
		<link>http://docs.jmini.fr/code/script-convertir-csv-en-sql</link>
		<comments>http://docs.jmini.fr/code/script-convertir-csv-en-sql#comments</comments>
		<pubDate>Mon, 06 Aug 2007 05:58:00 +0000</pubDate>
		<dc:creator>Jérémie Bresson</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[sql]]></category>

		<guid isPermaLink="false">http://docs.jmini.fr/?p=14</guid>
		<description><![CDATA[Voici un petit script AWK pour convertir un fichier csv (provenant d&#8217;Excel ou de n&#8217;importe quel autre programme) en une requête SQL (pour remplir une base de données MySQL avec phpMyAdmin par exemple).
Il fonctionne grâce à AWK, donc sur pratiquement n&#8217;importe quel système UNIX, et Mac OS X en particulier.
Pour en savoir plus sur l&#8217;utilisation [...]]]></description>
			<content:encoded><![CDATA[<p>Voici un petit script AWK pour convertir un fichier csv (provenant d&#8217;Excel ou de n&#8217;importe quel autre programme) en une requête SQL (pour remplir une base de données MySQL avec phpMyAdmin par exemple).</p>
<p>Il fonctionne grâce à AWK, donc sur pratiquement n&#8217;importe quel système UNIX, et Mac OS X en particulier.</p>
<p>Pour en savoir plus sur l&#8217;utilisation de AWK dans Mac OS X, je vous invite à consulter l&#8217;article <a href="http://docs.jmini.fr/pas-a-pas/se-servir-de-awk-dans-mac-os-x" title="Se servir de AWK dans Mac OS X">Se servir de AWK dans Mac OS X</a></p>
<p>Le script :</p>
<div class="markCode"><div class="boxCode"><code>
<pre class="Clr_Code"><span class="Clr_Comment">#!/usr/bin/awk -f
# Script de conversion d'un fichier .csv Excel en un script d'insertion SQL.
# version 1
# http://jmini.fr/

# STRUCTURE DU FICHIER :
# separateur : ;
# premiere ligne : nom de la table
# deuxieme ligne : nom des champs
# lignes suivantes : enregistrements</span>

<span class="Clr_Anchor">BEGIN</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Var">FS</span>=<span class="Clr_String">"<span class="Clr_Operator">;</span>"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">RS</span>=<span class="Clr_String">"\n"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">OFS</span>=<span class="Clr_String">""</span><span class="Clr_Operator">;</span>
	<span class="Clr_Func">printf</span> <span class="Clr_String">"-- csvToSql : debut du script sql\n"</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Operator">{</span>
	<span class="Clr_Func">gsub</span>(<span class="Clr_String">/'/</span><span class="Clr_Operator">,</span><span class="Clr_String">"\\'"</span><span class="Clr_Operator">,</span> <span class="Clr_Var">$0</span>)<span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Var">NR</span>==<span class="Clr_Int">1</span> <span class="Clr_Operator">{</span>
	li=<span class="Clr_String">"INSERT INTO  `"</span> <span class="Clr_Var">$1</span> <span class="Clr_String">"` (  `"</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>
<span class="Clr_Var">NR</span>==<span class="Clr_Int">2</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Var">nb_champ</span>=<span class="Clr_Var">NF</span><span class="Clr_Operator">;</span>
	<span class="Clr_KeyWord">for</span>(<span class="Clr_Var">i</span>=<span class="Clr_Int">1</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span>&lt;<span class="Clr_Var">NF</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span><span class="Clr_Operator">++</span>)
		<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"` ,  `"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"` ) "</span><span class="Clr_Operator">;</span>
	<span class="Clr_Func">print</span> <span class="Clr_Var">li</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">li</span>=<span class="Clr_String">"VALUES "</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Var">NR</span>&gt;<span class="Clr_Int">2</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_String">"('"</span>
	<span class="Clr_KeyWord">for</span>(<span class="Clr_Var">i</span>=<span class="Clr_Int">1</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span>&lt;<span class="Clr_Var">nb_champ</span><span class="Clr_Operator">;</span> <span class="Clr_Var">i</span><span class="Clr_Operator">++</span>)
		<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"',  '"</span><span class="Clr_Operator">;</span>

	<span class="Clr_Var">li</span>=<span class="Clr_Var">li</span> <span class="Clr_Var">$i</span> <span class="Clr_String">"')"</span><span class="Clr_Operator">;</span>

	<span class="Clr_Func">print</span> <span class="Clr_Var">li</span><span class="Clr_Operator">;</span>
	<span class="Clr_Var">li=<span class="Clr_String">", "</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>

<span class="Clr_Anchor">END</span> <span class="Clr_Operator">{</span>
	<span class="Clr_Func">print</span> <span class="Clr_String">";"</span><span class="Clr_Operator">;</span>
	<span class="Clr_Func">print</span> <span class="Clr_String">"-- csvToSql : fin du script sql \n"</span><span class="Clr_Operator">;</span>
<span class="Clr_Operator">}</span>
</span></pre>
<p></code></div></div>
<p>Retrouvez tous les fichiers de démonstration dans une archive zip : <a href="http://docs.jmini.fr/wp-content/uploads/2008/11/csvsql.zip" title="csvsql" class="attachment_file">csvsql.zip</a></p>
<h2>Utilisation du script :</h2>
<h3>1) Préparer le fichier CSV</h3>
<p>Peu importe la manière dont vous obtenez votre fichier CSV (copier-coller, export Excel&#8230;) vous devez vous assurer qu&#8217;il respecte bien le format prévu par le script. Si ce n&#8217;est pas le cas, un éditeur texte et une série de rechercher-remplacer devrait faire l&#8217;affaire. Pour les utilisateurs avertis, il est aussi possible de changer le script AWK&#8230;</p>
<p>Dans la configuration du script actuelle, il faut que fichier soit construit de la manière suivante :</p>
<ul>
<li>Le séparateur de champs doit être un point-virgule &laquo;&nbsp;;&nbsp;&raquo;</li>
<li>La première ligne ne doit contenir qu&#8217;un champ : le nom de la table</li>
<li>La deuxième ligne doit contenir les noms des champs de la table SQL</li>
<li>Les lignes suivantes doivent contenir les enregistrements (et donc le même nombre de champs que la deuxième ligne, s’il y en a plus, ils seront ignorés)</li>
</ul>
<p>Exemple : fichier panier.csv :</p>
<div class="markCode"><div class="boxCode"><code>panier<br />
id;fruit;nombre;etat<br />
1;pomme;23;bon<br />
2;poire;4;mauvais<br />
3;banane;7;parfait</code></div></div>
<p>Ce fichier s&#8217;obtient très facilement avec Excel en remplissant correctement une feuille du classeur :</p>
<div id="attachment_21" class="wp-caption alignnone" style="width: 310px"><img class="size-medium wp-image-21" title="capture_excel" src="http://docs.jmini.fr/wp-content/uploads/2008/08/img46b194dcb445e-300x121.png" alt="Visualisation du fichier CSV dans Excel" width="300" height="121" /><p class="wp-caption-text">Visualisation du fichier CSV dans Excel</p></div>
<p>Pour générer le fichier CSV, il suffit de faire : <strong>Menu &gt; Fichier &gt; Enregistrer sous&#8230;</strong> puis de choisir dans le format de fichier « CSV (séparateur : point-virgule) »</p>
<div class="markNote"><blockquote><strong>Attention :</strong> parfois, le fichier généré par Excel ne fonctionne pas avec AWK. Il suffit d&#8217;ouvrir le fichier CSV dans un éditeur de texte, de tout sélectionner, de copier la sélection et de coller le texte dans un nouveau fichier que l&#8217;on réenregistre.</blockquote></div>
<p>Enregistrer le fichier dans le répertoire de travail (ici un dossier csvsql sur le bureau).</p>
<h3>2) Préparation du script</h3>
<p>Copier le script ci-dessus dans un fichier texte nommé csvToSql.awk et rendez-le exécutable (méthode décrite dans l&#8217;<a href="http://docs.jmini.fr/pas-a-pas/se-servir-de-awk-dans-mac-os-x" title="Se servir de AWK dans Mac OS X">article sur l&#8217;utilisation d&#8217;AWK</a>)</p>
<p>ou utilisez le script de l&#8217;archive Zip de démonstration</p>
<p>Le plus simple est d&#8217;avoir ce fichier de script dans le répertoire de travail (dans notre cas, toujours le dossier csvsql sur le bureau).</p>
<h3>3) Préparer le terminal</h3>
<p>Ouvrer le terminal et placer vous dans le répertoire de travail contenant le script AWK (csvToSql.awk) et le fichier source (dans notre exemple panier.csv) <div class="markCode"><div class="boxCode"><code>$ cd ~/Desktop/csvsql/</code></div></div></p>
<h3>4) Lancer le script :</h3>
<p>Il suffit de taper dans le terminal la commande : <div class="markCode"><div class="boxCode"><code>$ ./csvToSql.awk panier.csv</code></div></div></p>
<p>On obtient dans terminal la requête SQL que l&#8217;on peut réutiliser à l&#8217;endroit adéquat (notamment dans PhpMyAdmin)</p>
<div class="markCode"><div class="boxCode"><code>
<pre class="Clr_Code"><span class="Clr_Comment">-- csvToSql : debut du script sql</span>
<span class="Clr_KeyWord">INSERT INTO</span>  <span class="Clr_String">`panier`</span> <span class="Clr_Operator">(</span>  <span class="Clr_String">`id`</span> <span class="Clr_Operator">,</span>  <span class="Clr_String">`fruit`</span> <span class="Clr_Operator">,</span>  <span class="Clr_String">`nombre`</span> <span class="Clr_Operator">,</span>  <span class="Clr_String">`etat`</span> <span class="Clr_Operator">)</span>
<span class="Clr_KeyWord">VALUES</span> <span class="Clr_Operator">(</span><span class="Clr_String">'1'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'pomme'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'23'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'bon'</span><span class="Clr_Operator">)</span><span class="Clr_Operator">,</span> <span class="Clr_Operator">(</span><span class="Clr_String">'2'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'poire'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'4'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'mauvais'</span><span class="Clr_Operator">)</span><span class="Clr_Operator">,</span> <span class="Clr_Operator">(</span><span class="Clr_String">'3'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'banane'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'7'</span><span class="Clr_Operator">,</span>  <span class="Clr_String">'parfait'</span><span class="Clr_Operator">)</span><span class="Clr_Operator">;</span>
<span class="Clr_Comment">-- csvToSql : fin du script sql</span></pre>
<p></code></div></div>
<hr />
En annexe voici une requête permettant de créer la structure de la table correspondant à notre exemple.</p>
<div class="markCode"><div class="boxCode"><code>
<pre class="Clr_Code"><span class="Clr_Comment">-- Creation de la table</span>
<span class="Clr_KeyWord">CREATE TABLE</span>  <span class="Clr_String">`panier`</span> <span class="Clr_Operator">(</span>
<span class="Clr_String">`id`</span> <span class="Clr_KeyWord">INT</span><span class="Clr_Operator">(</span> <span class="Clr_Int">4</span> <span class="Clr_Operator">)</span> <span class="Clr_KeyWord">NOT NULL</span> AUTO_INCREMENT <span class="Clr_Operator">,</span>
<span class="Clr_String">`fruit`</span> <span class="Clr_KeyWord">VARCHAR</span><span class="Clr_Operator">(</span> <span class="Clr_Int">20</span> <span class="Clr_Operator">)</span> <span class="Clr_Operator">,</span>
<span class="Clr_String">`nombre`</span> <span class="Clr_KeyWord">INT</span><span class="Clr_Operator">(</span> <span class="Clr_Int">8</span> <span class="Clr_Operator">)</span> DEFAULT  <span class="Clr_String">'0'</span> <span class="Clr_KeyWord">NOT NULL</span> <span class="Clr_Operator">,</span>
<span class="Clr_String">`etat`</span> <span class="Clr_KeyWord">VARCHAR</span><span class="Clr_Operator">(</span> <span class="Clr_Int">20</span> <span class="Clr_Operator">)</span> <span class="Clr_Operator">,</span>
<span class="Clr_KeyWord">PRIMARY KEY</span> <span class="Clr_Operator">(</span>  <span class="Clr_String">`id`</span> <span class="Clr_Operator">)</span>
<span class="Clr_Operator">)</span> TYPE <span class="Clr_Operator">=</span> MYISAM COMMENT <span class="Clr_Operator">=</span>  <span class="Clr_String">'Panier de fruits'</span><span class="Clr_Operator">;</span></pre>
<p></code></div></div>
]]></content:encoded>
			<wfw:commentRss>http://docs.jmini.fr/code/script-convertir-csv-en-sql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Se servir de AWK dans Mac OS X</title>
		<link>http://docs.jmini.fr/pas-a-pas/se-servir-de-awk-dans-mac-os-x</link>
		<comments>http://docs.jmini.fr/pas-a-pas/se-servir-de-awk-dans-mac-os-x#comments</comments>
		<pubDate>Fri, 20 Jul 2007 20:41:02 +0000</pubDate>
		<dc:creator>Jérémie Bresson</dc:creator>
				<category><![CDATA[Pas à pas]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[programmation]]></category>
		<category><![CDATA[terminal]]></category>

		<guid isPermaLink="false">http://docs.jmini.fr/?p=13</guid>
		<description><![CDATA[Durant un de mes cours, j&#8217;ai été amené à utiliser le langage de script AWK. N&#8217;étant pas un spécialiste du terminal, j&#8217;ai éprouvé quelques difficultés pour reproduire avec MAC OS X ce que j&#8217;avais vu en cours. Cet article est donc un genre de &#171;&#160;AWK sur MAC OS X pour les nuls&#171;&#160;.
AWK :
AWK est un [...]]]></description>
			<content:encoded><![CDATA[<p>Durant un de mes cours, j&#8217;ai été amené à utiliser le langage de script AWK. N&#8217;étant pas un spécialiste du terminal, j&#8217;ai éprouvé quelques difficultés pour reproduire avec MAC OS X ce que j&#8217;avais vu en cours. Cet article est donc un genre de &laquo;&nbsp;<em>AWK sur MAC OS X pour les nuls</em>&laquo;&nbsp;.</p>
<h2>AWK :</h2>
<p>AWK est un langage de script essentiellement fait pour manipuler les lignes d&#8217;un fichier texte. Il est particulièrement utile pour exécuter toute sorte d&#8217;opérations sur les fichiers CSV (pour Comma-separated values &#8211; texte tabuler).</p>
<p>Le nom AWK est l&#8217;assemblage des initiales des noms des créateurs du langage :  Alfred <strong>A</strong>ho, Peter <strong>W</strong>einberger et Brian <strong>K</strong>ernighan.</p>
<p>On trouve ce langage sur pratiquement tous les systèmes UNIX sous le nom d&#8217;awk ou gawk (pour GNU awk). C&#8217;est évidemment le cas sur Mac OS X.</p>
<h2>Création d&#8217;un programme :</h2>
<p>Encore une fois, cet article est vraiment écrit &laquo;&nbsp;<em>pour les nuls</em>&nbsp;&raquo; et je conseille aux spécialistes d&#8217;UNIX de passer leur chemin. Voici pas à pas les étapes à suivre pour créer un script simple qui affiche les lignes impaires d&#8217;un fichier.</p>
<h3>0) Vérifier le chemin d&#8217;awk :</h3>
<p>Pour savoir où se situe la commande <strong>awk</strong> (à priori dans le répertoire bin), il suffit de lancer dans le terminal la commande <strong>wich</strong> : <div class="markCode"><div class="boxCode"><code></p>
<pre>which awk</pre>
<p></code></div></div></p>
<p>Normalement le shell répond <em>/usr/bin/awk</em></p>
<h3>1) Ecrire le fichier de script :</h3>
<p>Bien que l&#8217;on puisse utiliser directement la commande <strong>awk</strong> dans le terminal, très vite on souhaite avoir un script un petit peu sophistiqué. Il est donc plus simple de le taper dans un fichier texte : <em>ligneImpaire.awk</em>.</p>
<p>A l&#8217;aide de n&#8217;importe quel éditeur de texte (personnellement j&#8217;utilise <a href="http://macromates.com/" target="_blank">TextMate</a>, mais les plus Geek pourront utiliser la commande <em>nano</em> ou <em>vi</em> dans le terminal) il faut créer le fichier. Mettons qu&#8217;on l&#8217;enregistre dans un dossier awk sur le bureau.</p>
<h3>2) Première ligne du fichier :</h3>
<p>La première ligne du fichier doit impérativement être : <div class="markCode"><div class="boxCode"><code></p>
<pre>#!/usr/bin/awk -f</pre>
<p></code></div></div></p>
<p>(avec le chemin trouvé à l&#8217;étape 0)</p>
<p>C&#8217;est primordial, cette ligne indique en effet au terminal qu&#8217;il s&#8217;agit d&#8217;un script AWK.</p>
<p>Ensuite il est bon d&#8217;écrire sur quelques lignes de commentaires à quoi sert le script que l&#8217;on est en train de taper (pour s&#8217;en souvenir plus tard).</p>
<p>Notre fichier contient donc :<br />
<div class="markCode"><div class="boxCode"><code></p>
<pre>#!/usr/bin/awk -f

# ligneImpaire.awk : affiche les lignes impaires d'un fichier
# http://jmini.fr/

(NR % 2 == 1) {
	print $0
}</pre>
<p></code></div></div></p>
<p>Pour le script en lui même je vous envoie vers d&#8217;excellents tutoriaux listé à la fin de cet article.</p>
<h3>3) Rendre le fichier exécutable :</h3>
<p>Dans le terminal on se place dans le dossier du script avec la commande <strong>cd</strong> : <div class="markCode"><div class="boxCode"><code></p>
<pre>cd ~/Desktop/awk/</pre>
<p></code></div></div></p>
<p>Ensuite on utilise la commande <strong>chmod</strong> pour rendre le fichier exécutable : <div class="markCode"><div class="boxCode"><code></p>
<pre>chmod +x ligneImpaire.awk</pre>
<p></code></div></div></p>
<h3>4) Lancer le fichier :</h3>
<p>Pour lancer le script il suffit de faire avec la commande <strong>./ligneImpaire.awk</strong> suivit des fichiers à traiter : <div class="markCode"><div class="boxCode"><code></p>
<pre>./ligneImpaire.awk texte.txt</pre>
<p></code></div></div></p>
<p>Et c&#8217;est tout !!!</p>
<p>J&#8217;ai écris un autre article sur <a href="http://docs.jmini.fr/notes/rendre-executable-terminal" title="Rendre un fichier exécutable dans le terminal">le fait de rendre un fichier exécutable dans le terminal</a></p>
<p>En pièce jointe de cet article, retrouvez l&#8217;archive contenant tous les fichiers : <a href="http://docs.jmini.fr/wp-content/uploads/2008/11/awk.zip" title="awk" class="attachment_file">awk.zip</a></p>
<h2>En savoir plus :</h2>
<ul>
<li><a href="http://fr.wikipedia.org/wiki/Awk">AWK</a> sur Wikipédia.</li>
<li><a href="http://nyal.developpez.com/tutoriel/gawk/index.php">Tutoriel awk</a> : simple, concis et efficace sur <a href="http://www.developpez.com/">devellopez.com</a>.</li>
<li><a href="http://ploug.eu.org/doc/principe-awk-lacroix.pdf">LE LANGAGE AWK</a> par Frédéric LACROIX et Dan BOG, tout sur AWK en 105 pages avec explications détaillées et exemples.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://docs.jmini.fr/pas-a-pas/se-servir-de-awk-dans-mac-os-x/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
