<?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>El blog de Deigote &#187; contador</title>
	<atom:link href="http://blog.deigote.com/tag/contador/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.deigote.com</link>
	<description>El mundo de Deigote. Un diario de cualquier cosa que me resulte interesante (si a alguien más se lo resulta, es otro cantar). Espero que os guste o disguste. Incluso que os deje indiferentes sería una opción tan buena como cualquier otra.</description>
	<lastBuildDate>Thu, 07 Apr 2011 15:29:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Si la salida fuese un Excell, lo llamaríamos ingeniería del software</title>
		<link>http://blog.deigote.com/2008/12/11/si-la-salida-fuese-un-excell-lo-llamariamos-ingenieria-del-software/</link>
		<comments>http://blog.deigote.com/2008/12/11/si-la-salida-fuese-un-excell-lo-llamariamos-ingenieria-del-software/#comments</comments>
		<pubDate>Thu, 11 Dec 2008 15:47:40 +0000</pubDate>
		<dc:creator>Deigote</dc:creator>
				<category><![CDATA[Informática, internet y tecnología]]></category>
		<category><![CDATA[awk]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[contador]]></category>
		<category><![CDATA[contador de lineas]]></category>
		<category><![CDATA[counter]]></category>
		<category><![CDATA[ingeniería]]></category>
		<category><![CDATA[line]]></category>
		<category><![CDATA[line counter]]></category>
		<category><![CDATA[lineas]]></category>
		<category><![CDATA[scripting]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://blog.deigote.com/?p=273</guid>
		<description><![CDATA[Lo que ha empezado como un simple conteo de ficheros para ver qué proyecto hacía que Eclipse fuese lento, ha terminado en todo un contador de líneas digno de aparecer en cualquier libro de ingeniería del software (nótese la cursiva, por favor  ), si no fuera porque es un script de consola bash con [...]]]></description>
			<content:encoded><![CDATA[<p>Lo que ha empezado como un simple conteo de ficheros para ver qué proyecto hacía que <a title="Eclipse IDE" href="http://www.eclipse.org/">Eclipse</a> fuese lento, ha terminado en todo un contador de líneas digno de aparecer en cualquier libro de <em>ingeniería del software</em> (nótese la cursiva, por favor <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':???:' title=':???:' class='wp-smiley smiley-3' /> ), si no fuera porque es un script de consola bash con salida de texto simple.</p>
<p>Al grano:</p>
<pre><code>#!/bin/bash
EXTENSIONES="$@"
ficheros_total=0
lineas_total=0
vacias_total=0
novacias_total=0
for ext in $EXTENSIONES ; do
   echo EXTENSION $ext
   ficheros=`find . -name "*.$ext" | wc -l`
   lineas=`find . -name "*.$ext" | xargs cat | wc -l`
   novacias=`find . -name "*.$ext" | xargs cat | awk 'BEGIN { lineas = 0 } { if ($0 != "") lineas++} END { print lineas }'`
   vacias=`find . -name "*.$ext" | xargs cat | awk 'BEGIN { lineas = 0 } { if ($0 == "") lineas++} END { print lineas }'`
   porcentaje=`echo $vacias $lineas | awk '{ print $1 / $2 * 100 }'`
   echo Tiene $ficheros ficheros de tipo $ext y $lineas lineas, de las cuales $novacias tienen contenido y $vacias son vacias \(un $porcentaje %\)
   ficheros_total=`expr $ficheros_total + $ficheros`
   lineas_total=`expr $lineas_total + $lineas`
   vacias_total=`expr $vacias_total + $vacias`
   novacias_total=`expr $novacias_total + $novacias`
done
if [[ $# -gt 1 ]] ; then
   porcentaje_total=`echo $vacias_total $lineas_total | awk '{ print $1 / $2 * 100 }'`
   echo TOTAL
   echo Tiene $ficheros_total ficheros en total, con $lineas_total lineas, de las cuales $novacias_total tienen contenido y $vacias_total son vacias \(un $porcentaje_total %\)
fi
</code></pre>
<p>Ejemplo de uso (guardandolo en un fichero cuenta_lineas.sh accesible por el path y con los permisos adecuados):</p>
<pre><code>$ cd directorio_raiz_del_proyecto/ ; ./cuenta_lineas.sh java jsp xml
EXTENSION java
Tiene 388 ficheros de tipo java y 60035 lineas, de las cuales 47806 tienen contenido y 12230 son vacias (un 20.3714 %)
EXTENSION jsp
Tiene 792 ficheros de tipo jsp y 91354 lineas, de las cuales 75267 tienen contenido y 16088 son vacias (un 17.6106 %)
EXTENSION xml
Tiene 170 ficheros de tipo xml y 32282 lineas, de las cuales 30437 tienen contenido y 1846 son vacias (un 5.71836 %)
TOTAL
Tiene 1350 ficheros en total, con 183671 lineas, de las cuales 153510 tienen contenido y 30164 son vacias (un 16.4228 %)
</code></pre>
<p>Mola <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':mrgreen:' title=':mrgreen:' class='wp-smiley smiley-12' /> aunque <s>es mejorable sacando porcentajes</s> (ver abajo <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':-D' title=':-D' class='wp-smiley smiley-2' /> ), pero no he encontrado un mandato tipo expr que trabaje con floats <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':neutral:' title=':neutral:' class='wp-smiley smiley-13' /> (a ver si <a href="http://blog.deigote.com/2007/10/31/creando-ficheros-tipo-jar-de-java-en-unix-solo-clases/#comment-646">algún comentarista</a> me da el tip <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':-)' title=':-)' class='wp-smiley smiley-19' /> )</p>
<p><strong>EDITO</strong>: Ya se me ha ocurrido cómo hacer los porcentajes <a href="http://blog.deigote.com/2008/12/11/si-la-salida-fuese-un-excell-lo-llamariamos-ingenieria-del-software/#comment-1726">mientras contestaba</a> <img src='http://blog.deigote.com/wp-includes/images/blank.gif' alt=':lol:' title=':lol:' class='wp-smiley smiley-10' /> actualizado el código y la salida del mismo</p>
<p><strong>EDITO de nuevo</strong>: Si queréis <a href="http://blog.deigote.com/2008/12/11/si-la-salida-fuese-un-excell-lo-llamariamos-ingenieria-del-software/#comment-1496">añadir más filtros</a> a las lineas vacías, tal y como sugiere Kortatu (<em>que yo ya he barajado</em>), tendréis que cambiar la línea </p>
<pre><code>novacias=`find . -name "*.$ext" | xargs cat | awk 'BEGIN { lineas = 0 } { if ($0 != "") lineas++} END { print lineas }'`</code></pre>
<p>por</p>
<pre><code>novacias=`find . -name "*.$ext" | xargs cat | grep -v '^$' | grep -v '^\s*\}\s*$'  | grep -v '^\s*\*.**$' | grep -v '^\s*/\*\*.*$' | grep -v '^\s.//.*$'</code></pre>
<p>Útil para código de la familia Java :D. ¡Gracias!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.deigote.com/2008/12/11/si-la-salida-fuese-un-excell-lo-llamariamos-ingenieria-del-software/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
