<?xml version='1.0'?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:atom="http://www.w3.org/2005/Atom" >
<channel>
	<title><![CDATA[BOL: Related items]]></title>
	<link>https://bioinformaticsonline.com/related/42921?offset=60</link>
	<atom:link href="https://bioinformaticsonline.com/related/42921?offset=60" rel="self" type="application/rss+xml" />
	<description><![CDATA[]]></description>
	
	<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/blog/view/40736/list-of-perl-special-symbols</guid>
	<pubDate>Tue, 28 Jan 2020 06:44:27 -0600</pubDate>
	<link>https://bioinformaticsonline.com/blog/view/40736/list-of-perl-special-symbols</link>
	<title><![CDATA[List of perl special symbols !]]></title>
	<description><![CDATA[<p><span>There are some variables which have a predefined and special meaning in Perl. They are the variables that use punctuation characters after the usual variable indicator ($, @, or %), such as $_ ( explained below ).</span></p><p>Special Symbols &ndash; File handlers</p><blockquote><p>$@ Perl error string</p><p>$! Error number from C, &lsquo;errno&rsquo;</p><p>$^E Extended OS error info, such as &lsquo;CDROM tray not closed&rsquo;</p><p>$? Exit status from last process</p><p>$AGRV &ndash; name of current file</p><p>@ARGV &ndash; command line arguments</p><p>$ARGV &ndash; special file handle for command line filenames</p><p>$. &ndash; current line number</p><p>$/ - input line delimiter</p><p>$\ - output line delimiter</p><p>$% - current page number</p><p>$&amp;/${^MATCH} &ndash; last successful matching string</p><p>$`/${^PREMATCH} &ndash; the string preceding the last matching string</p><p>$&rsquo;/${^POSTMATCH} &ndash; the string following the last matching string</p><p>$1, $2, &hellip; - matching groups in the parentheses in pattern</p></blockquote><p>More at&nbsp;<a href="https://www.tutorialspoint.com/perl/perl_special_variables.htm">https://www.tutorialspoint.com/perl/perl_special_variables.htm</a></p>]]></description>
	<dc:creator>Jit</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/2727/download-mutliple-fasta-file-from-ncbi-in-one-go</guid>
	<pubDate>Wed, 21 Aug 2013 08:13:30 -0500</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/2727/download-mutliple-fasta-file-from-ncbi-in-one-go</link>
	<title><![CDATA[Download mutliple fasta file from NCBI in one GO!!]]></title>
	<description><![CDATA[<p>if you have less time, then use three ways mentioned in bookmark link to extract/download all fasta sequences in single click given that you already have a list of GIs or accession IDs .</p>
<p>Alternatively, use one liner perl script:</p>
<p>perl -ne 'if(/^&gt;(\S+)/){$c=$i{$1}}$c?print:chomp;$i{$_}=1 if @ARGV' GIs.txt &gt;sequence.fasta</p>
<p>where GIs.txt contains&nbsp;a list of GIs or accession IDs.</p>
<p>(from :<a href="http://edwards.sdsu.edu/labsite/index.php/robert?start=5">http://edwards.sdsu.edu/labsite/index.php/robert?start=5</a>)</p><p>Address of the bookmark: <a href="http://edwards.sdsu.edu/labsite/index.php/robert/380-ncbi-sequence-or-fasta-batch-download-using-entrez" rel="nofollow">http://edwards.sdsu.edu/labsite/index.php/robert/380-ncbi-sequence-or-fasta-batch-download-using-entrez</a></p>]]></description>
	<dc:creator>Rahul Agarwal</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/pages/view/33842/awesome-perl-frameworks-libraries-and-software-part-5</guid>
	<pubDate>Fri, 07 Jul 2017 04:12:47 -0500</pubDate>
	<link>https://bioinformaticsonline.com/pages/view/33842/awesome-perl-frameworks-libraries-and-software-part-5</link>
	<title><![CDATA[Awesome perl frameworks, libraries and software - PART 5]]></title>
	<description><![CDATA[<ul>
<li><a href="https://github.com/robelix/sub2srt">robelix/sub2srt</a>&nbsp;- subtitle converter</li>
<li><a href="https://github.com/reyjrar/graphite-scripts">reyjrar/graphite-scripts</a>&nbsp;- A Collections of Scripts for Working with Graphite</li>
<li><a href="https://github.com/regilero/check_nginx_status">regilero/check_nginx_status</a>&nbsp;- Nagios check for nginx status report</li>
<li><a href="https://github.com/omniti-labs/resmon">omniti-labs/resmon</a>&nbsp;- resmon</li>
<li><a href="https://github.com/motemen/App-htmlcat">motemen/App-htmlcat</a>&nbsp;- redirect stdin to web browser</li>
<li><a href="https://github.com/moose/Moo">moose/Moo</a>&nbsp;- Minimalist Object Orientation (with Moose compatibility)</li>
<li><a href="https://github.com/miyagawa/fastpass">miyagawa/fastpass</a>&nbsp;- Tiny, XS free, standalone and preforking FastCGI daemon for PSGI</li>
<li><a href="https://github.com/miyagawa/Filesys-Notify-Simple">miyagawa/Filesys-Notify-Simple</a>&nbsp;- Simple and dumb file system watcher</li>
<li><a href="https://github.com/mhop/fhem-mirror">mhop/fhem-mirror</a>&nbsp;- Branch 'master' is a read-only-mirror of svn://svn.code.sf.net/p/fhem/code which is updated once a day. On branch 'enocean' I am going to add some Enocean-Devices</li>
<li><a href="https://github.com/lopnor/Plack-App-DAV">lopnor/Plack-App-DAV</a>&nbsp;- simple DAV server for Plack</li>
<li><a href="https://github.com/kazuho/url_compress">kazuho/url_compress</a>&nbsp;- a static PPM-based URL compressor / decompressor</li>
<li><a href="https://github.com/jnthn/6model">jnthn/6model</a>&nbsp;- Just a place that I'm keeping some meta-model prototyping; anything that matters will make it to another repo (e.g. nqp-rx one or Rakudo one) at some point.</li>
<li><a href="https://github.com/jasonhancock/nagios-puppetdb">jasonhancock/nagios-puppetdb</a>&nbsp;- Nagios plugins and pnp4nagios templates related to Puppetlab's PuppetDB project.</li>
<li><a href="https://github.com/goccy/p5-Compiler-Parser">goccy/p5-Compiler-Parser</a>&nbsp;- Create Abstract Syntax Tree for Perl5</li>
<li><a href="https://github.com/cgutteridge/Grinder">cgutteridge/Grinder</a>&nbsp;- Create RDF data from spreadsheets or CSV</li>
<li><a href="https://github.com/c9s/Plack-Middleware-OAuth">c9s/Plack-Middleware-OAuth</a>&nbsp;- Plack Middleware for OAuth1 and OAuth2</li>
<li><a href="https://github.com/bzip2-cuda/bzip2-cuda">bzip2-cuda/bzip2-cuda</a>&nbsp;- Parallel implementation of bzip2 using cuda</li>
<li><a href="https://github.com/alanstevens/ChocoPackages">alanstevens/ChocoPackages</a>&nbsp;- Chocolatey Nuget Packages</li>
<li><a href="https://github.com/SoylentNews/slashcode">SoylentNews/slashcode</a>&nbsp;- The slashcode repository for SoylentNews. The initial code base was uploaded as it appeared on Sourceforge as of the last commit in September 2009</li>
<li><a href="https://github.com/Miserlou/XSS-Harvest">Miserlou/XSS-Harvest</a>&nbsp;- XSS Weaponization</li>
</ul>]]></description>
	<dc:creator>Neel</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/file/view/36952/getoptspl-file</guid>
	<pubDate>Fri, 15 Jun 2018 04:43:03 -0500</pubDate>
	<link>https://bioinformaticsonline.com/file/view/36952/getoptspl-file</link>
	<title><![CDATA[getopts.pl file]]></title>
	<description><![CDATA[
<p>SSPACE_longread complain for getopts.pl file. </p>

<p>To resolve this, download and have in SSPACED-Longreads folder. </p>

<p>Cheers :)</p>
]]></description>
	<dc:creator>Jit</dc:creator>
	<enclosure url="https://bioinformaticsonline.com/file/download/36952" length="942" type="text/plain" />
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/21703/coding-ground</guid>
	<pubDate>Tue, 17 Mar 2015 00:47:20 -0500</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/21703/coding-ground</link>
	<title><![CDATA[Coding Ground]]></title>
	<description><![CDATA[<p>Online coding group for most of the programming languages.</p>
<p>Code in almost all popular languages using Coding Ground.&nbsp;Edit, compile, execute and share your projects, 100% cloud.</p>
<p>http://www.tutorialspoint.com/codingground.htm</p><p>Address of the bookmark: <a href="http://www.tutorialspoint.com/codingground.htm" rel="nofollow">http://www.tutorialspoint.com/codingground.htm</a></p>]]></description>
	<dc:creator>Jitendra Narayan</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/bookmarks/view/30901/ideoplot</guid>
	<pubDate>Mon, 13 Feb 2017 09:47:32 -0600</pubDate>
	<link>https://bioinformaticsonline.com/bookmarks/view/30901/ideoplot</link>
	<title><![CDATA[Ideoplot]]></title>
	<description><![CDATA[<p>Simple ideogram plotting and annotation in R.</p>
<p>Basic usage:</p>
<p>Rscript Ideoplot.R --heatmap hm.bed --annotate annotations.bed --out ideogram.pdf<br> -or-<br> Rscript Ideoplot.R --annotate annotations.bed</p>
<pre>Options
  --ideobed, i      A bed file of reference contig lengths/chromosome names
  --heatmap, -h     Fill chromosomes with normalized heatmap
                   (described below)
  --annotate, -a    Add character annotations.
  --out, -o         PDF output name.
  --stripes, -s     Specify a file containing the layout of the
                    annotations (description below)
  --bars, -b        Add track annotations
  --reference, -f   Either hg19, or hg38
  --topdown, r      Flag, when set, flips the orientation (P arms
                    drawn on top).
</pre><p>Address of the bookmark: <a href="https://github.com/mchaisso/Ideoplot" rel="nofollow">https://github.com/mchaisso/Ideoplot</a></p>]]></description>
	<dc:creator>Shruti Paniwala</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/file/view/38029/biologist-versus-computational-biologist</guid>
	<pubDate>Mon, 29 Oct 2018 04:23:24 -0500</pubDate>
	<link>https://bioinformaticsonline.com/file/view/38029/biologist-versus-computational-biologist</link>
	<title><![CDATA[Biologist versus computational biologist !]]></title>
	<description><![CDATA[<p>This is how it work :)</p>]]></description>
	<dc:creator>Abhimanyu Singh</dc:creator>
	<enclosure url="https://bioinformaticsonline.com/file/download/38029" length="69305" type="image/png" />
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/blog/view/39307/awk-for-beginners</guid>
	<pubDate>Fri, 26 Apr 2019 16:19:41 -0500</pubDate>
	<link>https://bioinformaticsonline.com/blog/view/39307/awk-for-beginners</link>
	<title><![CDATA[AWK for beginners !]]></title>
	<description><![CDATA[<p>AWK is a standard tool on every POSIX-compliant UNIX system. It&rsquo;s like flex/lex, from the command-line, perfect for text-processing tasks and other scripting needs. It has a C-like syntax, but without mandatory semicolons (although, you should use them anyway, because they are required when you&rsquo;re writing one-liners, something AWK excels at), manual memory management, or static typing. It excels at text processing. You can call to it from a shell script, or you can use it as a stand-alone scripting language.</p><p>Why use AWK instead of Perl? Readability. AWK is easier to read than Perl. For simple text-processing scripts, particularly ones that read files line by line and split on delimiters, AWK is probably the right tool for the job.</p><div><pre><span>#!/usr/bin/awk -f</span>

<span># Comments are like this</span>


<span># AWK programs consist of a collection of patterns and actions.</span>
<span>pattern1</span> <span>{</span> <span>action</span><span>;</span> <span>}</span> <span># just like lex</span>
<span>pattern2</span> <span>{</span> <span>action</span><span>;</span> <span>}</span>

<span># There is an implied loop and AWK automatically reads and parses each</span>
<span># record of each file supplied. Each record is split by the FS delimiter,</span>
<span># which defaults to white-space (multiple spaces,tabs count as one)</span>
<span># You can assign FS either on the command line (-F C) or in your BEGIN</span>
<span># pattern</span>

<span># One of the special patterns is BEGIN. The BEGIN pattern is true</span>
<span># BEFORE any of the files are read. The END pattern is true after</span>
<span># an End-of-file from the last file (or standard-in if no files specified)</span>
<span># There is also an output field separator (OFS) that you can assign, which</span>
<span># defaults to a single space</span>

<span>BEGIN</span> <span>{</span>

    <span># BEGIN will run at the beginning of the program. It's where you put all</span>
    <span># the preliminary set-up code, before you process any text files. If you</span>
    <span># have no text files, then think of BEGIN as the main entry point.</span>

    <span># Variables are global. Just set them or use them, no need to declare..</span>
    <span>count</span> <span>=</span> <span>0</span><span>;</span>

    <span># Operators just like in C and friends</span>
    <span>a</span> <span>=</span> <span>count</span> <span>+</span> <span>1</span><span>;</span>
    <span>b</span> <span>=</span> <span>count</span> <span>-</span> <span>1</span><span>;</span>
    <span>c</span> <span>=</span> <span>count</span> <span>*</span> <span>1</span><span>;</span>
    <span>d</span> <span>=</span> <span>count</span> <span>/</span> <span>1</span><span>;</span> <span># integer division</span>
    <span>e</span> <span>=</span> <span>count</span> <span>%</span> <span>1</span><span>;</span> <span># modulus</span>
    <span>f</span> <span>=</span> <span>count</span> <span>^</span> <span>1</span><span>;</span> <span># exponentiation</span>

    <span>a</span> <span>+=</span> <span>1</span><span>;</span>
    <span>b</span> <span>-=</span> <span>1</span><span>;</span>
    <span>c</span> <span>*=</span> <span>1</span><span>;</span>
    <span>d</span> <span>/=</span> <span>1</span><span>;</span>
    <span>e</span> <span>%=</span> <span>1</span><span>;</span>
    <span>f</span> <span>^=</span> <span>1</span><span>;</span>

    <span># Incrementing and decrementing by one</span>
    <span>a</span><span>++</span><span>;</span>
    <span>b</span><span>--</span><span>;</span>

    <span># As a prefix operator, it returns the incremented value</span>
    <span>++</span><span>a</span><span>;</span>
    <span>--</span><span>b</span><span>;</span>

    <span># Notice, also, no punctuation such as semicolons to terminate statements</span>

    <span># Control statements</span>
    <span>if</span> <span>(</span><span>count</span> <span>==</span> <span>0</span><span>)</span>
        <span>print</span> <span>"Starting with count of 0"</span><span>;</span>
    <span>else</span>
        <span>print</span> <span>"Huh?"</span><span>;</span>

    <span># Or you could use the ternary operator</span>
    <span>print</span> <span>(</span><span>count</span> <span>==</span> <span>0</span><span>)</span> <span>?</span> <span>"Starting with count of 0"</span> <span>:</span> <span>"Huh?"</span><span>;</span>

    <span># Blocks consisting of multiple lines use braces</span>
    <span>while</span> <span>(</span><span>a</span> <span>&lt;</span> <span>10</span><span>)</span> <span>{</span>
        <span>print</span> <span>"String concatenation is done"</span> <span>" with a series"</span> <span>" of"</span>
            <span>" space-separated strings"</span><span>;</span>
        <span>print</span> <span>a</span><span>;</span>

        <span>a</span><span>++</span><span>;</span>
    <span>}</span>

    <span>for</span> <span>(</span><span>i</span> <span>=</span> <span>0</span><span>;</span> <span>i</span> <span>&lt;</span> <span>10</span><span>;</span> <span>i</span><span>++</span><span>)</span>
        <span>print</span> <span>"Good ol' for loop"</span><span>;</span>

    <span># As for comparisons, they're the standards:</span>
    <span># a &lt; b   # Less than</span>
    <span># a &lt;= b  # Less than or equal</span>
    <span># a != b  # Not equal</span>
    <span># a == b  # Equal</span>
    <span># a &gt; b   # Greater than</span>
    <span># a &gt;= b  # Greater than or equal</span>

    <span># Logical operators as well</span>
    <span># a &amp;&amp; b  # AND</span>
    <span># a || b  # OR</span>

    <span># In addition, there's the super useful regular expression match</span>
    <span>if</span> <span>(</span><span>"foo"</span> <span>~</span> <span>"^fo+$"</span><span>)</span>
        <span>print</span> <span>"Fooey!"</span><span>;</span>
    <span>if</span> <span>(</span><span>"boo"</span> <span>!~</span> <span>"^fo+$"</span><span>)</span>
        <span>print</span> <span>"Boo!"</span><span>;</span>

    <span># Arrays</span>
    <span>arr</span><span>[</span><span>0</span><span>]</span> <span>=</span> <span>"foo"</span><span>;</span>
    <span>arr</span><span>[</span><span>1</span><span>]</span> <span>=</span> <span>"bar"</span><span>;</span>

    <span># You can also initialize an array with the built-in function split()</span>

    <span>n</span> <span>=</span> <span>split</span><span>(</span><span>"foo:bar:baz"</span><span>,</span> <span>arr</span><span>,</span> <span>":"</span><span>);</span>

    <span># You also have associative arrays (actually, they're all associative arrays)</span>
    <span>assoc</span><span>[</span><span>"foo"</span><span>]</span> <span>=</span> <span>"bar"</span><span>;</span>
    <span>assoc</span><span>[</span><span>"bar"</span><span>]</span> <span>=</span> <span>"baz"</span><span>;</span>

    <span># And multi-dimensional arrays, with some limitations I won't mention here</span>
    <span>multidim</span><span>[</span><span>0</span><span>,</span><span>0</span><span>]</span> <span>=</span> <span>"foo"</span><span>;</span>
    <span>multidim</span><span>[</span><span>0</span><span>,</span><span>1</span><span>]</span> <span>=</span> <span>"bar"</span><span>;</span>
    <span>multidim</span><span>[</span><span>1</span><span>,</span><span>0</span><span>]</span> <span>=</span> <span>"baz"</span><span>;</span>
    <span>multidim</span><span>[</span><span>1</span><span>,</span><span>1</span><span>]</span> <span>=</span> <span>"boo"</span><span>;</span>

    <span># You can test for array membership</span>
    <span>if</span> <span>(</span><span>"foo"</span> <span>in</span> <span>assoc</span><span>)</span>
        <span>print</span> <span>"Fooey!"</span><span>;</span>

    <span># You can also use the 'in' operator to traverse the keys of an array</span>
    <span>for</span> <span>(</span><span>key</span> <span>in</span> <span>assoc</span><span>)</span>
        <span>print</span> <span>assoc</span><span>[</span><span>key</span><span>];</span>

    <span># The command line is in a special array called ARGV</span>
    <span>for</span> <span>(</span><span>argnum</span> <span>in</span> <span>ARGV</span><span>)</span>
        <span>print</span> <span>ARGV</span><span>[</span><span>argnum</span><span>];</span>

    <span># You can remove elements of an array</span>
    <span># This is particularly useful to prevent AWK from assuming the arguments</span>
    <span># are files for it to process</span>
    <span>delete</span> <span>ARGV</span><span>[</span><span>1</span><span>];</span>

    <span># The number of command line arguments is in a variable called ARGC</span>
    <span>print</span> <span>ARGC</span><span>;</span>

    <span># AWK has several built-in functions. They fall into three categories. I'll</span>
    <span># demonstrate each of them in their own functions, defined later.</span>

    <span>return_value</span> <span>=</span> <span>arithmetic_functions</span><span>(</span><span>a</span><span>,</span> <span>b</span><span>,</span> <span>c</span><span>);</span>
    <span>string_functions</span><span>();</span>
    <span>io_functions</span><span>();</span>
<span>}</span>

<span># Here's how you define a function</span>
<span>function</span> <span>arithmetic_functions</span><span>(</span><span>a</span><span>,</span> <span>b</span><span>,</span> <span>c</span><span>,</span>     <span>d</span><span>)</span> <span>{</span>

    <span># Probably the most annoying part of AWK is that there are no local</span>
    <span># variables. Everything is global. For short scripts, this is fine, even</span>
    <span># useful, but for longer scripts, this can be a problem.</span>

    <span># There is a work-around (ahem, hack). Function arguments are local to the</span>
    <span># function, and AWK allows you to define more function arguments than it</span>
    <span># needs. So just stick local variable in the function declaration, like I</span>
    <span># did above. As a convention, stick in some extra whitespace to distinguish</span>
    <span># between actual function parameters and local variables. In this example,</span>
    <span># a, b, and c are actual parameters, while d is merely a local variable.</span>

    <span># Now, to demonstrate the arithmetic functions</span>

    <span># Most AWK implementations have some standard trig functions</span>
    <span>localvar</span> <span>=</span> <span>sin</span><span>(</span><span>a</span><span>);</span>
    <span>localvar</span> <span>=</span> <span>cos</span><span>(</span><span>a</span><span>);</span>
    <span>localvar</span> <span>=</span> <span>atan2</span><span>(</span><span>b</span><span>,</span> <span>a</span><span>);</span> <span># arc tangent of b / a</span>

    <span># And logarithmic stuff</span>
    <span>localvar</span> <span>=</span> <span>exp</span><span>(</span><span>a</span><span>);</span>
    <span>localvar</span> <span>=</span> <span>log</span><span>(</span><span>a</span><span>);</span>

    <span># Square root</span>
    <span>localvar</span> <span>=</span> <span>sqrt</span><span>(</span><span>a</span><span>);</span>

    <span># Truncate floating point to integer</span>
    <span>localvar</span> <span>=</span> <span>int</span><span>(</span><span>5.34</span><span>);</span> <span># localvar =&gt; 5</span>

    <span># Random numbers</span>
    <span>srand</span><span>();</span> <span># Supply a seed as an argument. By default, it uses the time of day</span>
    <span>localvar</span> <span>=</span> <span>rand</span><span>();</span> <span># Random number between 0 and 1.</span>

    <span># Here's how to return a value</span>
    <span>return</span> <span>localvar</span><span>;</span>
<span>}</span>

<span>function</span> <span>string_functions</span><span>(</span>    <span>localvar</span><span>,</span> <span>arr</span><span>)</span> <span>{</span>

    <span># AWK, being a string-processing language, has several string-related</span>
    <span># functions, many of which rely heavily on regular expressions.</span>

    <span># Search and replace, first instance (sub) or all instances (gsub)</span>
    <span># Both return number of matches replaced</span>
    <span>localvar</span> <span>=</span> <span>"fooooobar"</span><span>;</span>
    <span>sub</span><span>(</span><span>"fo+"</span><span>,</span> <span>"Meet me at the "</span><span>,</span> <span>localvar</span><span>);</span> <span># localvar =&gt; "Meet me at the bar"</span>
    <span>gsub</span><span>(</span><span>"e+"</span><span>,</span> <span>"."</span><span>,</span> <span>localvar</span><span>);</span> <span># localvar =&gt; "m..t m. at th. bar"</span>

    <span># Search for a string that matches a regular expression</span>
    <span># index() does the same thing, but doesn't allow a regular expression</span>
    <span>match</span><span>(</span><span>localvar</span><span>,</span> <span>"t"</span><span>);</span> <span># =&gt; 4, since the 't' is the fourth character</span>

    <span># Split on a delimiter</span>
    <span>n</span> <span>=</span> <span>split</span><span>(</span><span>"foo-bar-baz"</span><span>,</span> <span>arr</span><span>,</span> <span>"-"</span><span>);</span> <span># a[1] = "foo"; a[2] = "bar"; a[3] = "baz"; n = 3</span>

    <span># Other useful stuff</span>
    <span>sprintf</span><span>(</span><span>"%s %d %d %d"</span><span>,</span> <span>"Testing"</span><span>,</span> <span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>);</span> <span># =&gt; "Testing 1 2 3"</span>
    <span>substr</span><span>(</span><span>"foobar"</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>);</span> <span># =&gt; "oob"</span>
    <span>substr</span><span>(</span><span>"foobar"</span><span>,</span> <span>4</span><span>);</span> <span># =&gt; "bar"</span>
    <span>length</span><span>(</span><span>"foo"</span><span>);</span> <span># =&gt; 3</span>
    <span>tolower</span><span>(</span><span>"FOO"</span><span>);</span> <span># =&gt; "foo"</span>
    <span>toupper</span><span>(</span><span>"foo"</span><span>);</span> <span># =&gt; "FOO"</span>
<span>}</span>

<span>function</span> <span>io_functions</span><span>(</span>    <span>localvar</span><span>)</span> <span>{</span>

    <span># You've already seen print</span>
    <span>print</span> <span>"Hello world"</span><span>;</span>

    <span># There's also printf</span>
    <span>printf</span><span>(</span><span>"%s %d %d %d\n"</span><span>,</span> <span>"Testing"</span><span>,</span> <span>1</span><span>,</span> <span>2</span><span>,</span> <span>3</span><span>);</span>

    <span># AWK doesn't have file handles, per se. It will automatically open a file</span>
    <span># handle for you when you use something that needs one. The string you used</span>
    <span># for this can be treated as a file handle, for purposes of I/O. This makes</span>
    <span># it feel sort of like shell scripting, but to get the same output, the string</span>
    <span># must match exactly, so use a variable:</span>

    <span>outfile</span> <span>=</span> <span>"/tmp/foobar.txt"</span><span>;</span>

    <span>print</span> <span>"foobar"</span> <span>&gt;</span> <span>outfile</span><span>;</span>

    <span># Now the string outfile is a file handle. You can close it:</span>
    <span>close</span><span>(</span><span>outfile</span><span>);</span>

    <span># Here's how you run something in the shell</span>
    <span>system</span><span>(</span><span>"echo foobar"</span><span>);</span> <span># =&gt; prints foobar</span>

    <span># Reads a line from standard input and stores in localvar</span>
    <span>getline</span> <span>localvar</span><span>;</span>

    <span># Reads a line from a pipe (again, use a string so you close it properly)</span>
    <span>cmd</span> <span>=</span> <span>"echo foobar"</span><span>;</span>
    <span>cmd</span> <span>|</span> <span>getline</span> <span>localvar</span><span>;</span> <span># localvar =&gt; "foobar"</span>
    <span>close</span><span>(</span><span>cmd</span><span>);</span>

    <span># Reads a line from a file and stores in localvar</span>
    <span>infile</span> <span>=</span> <span>"/tmp/foobar.txt"</span><span>;</span>
    <span>getline</span> <span>localvar</span> <span>&lt;</span> <span>infile</span><span>;</span> 
    <span>close</span><span>(</span><span>infile</span><span>);</span>
<span>}</span>

<span># As I said at the beginning, AWK programs consist of a collection of patterns</span>
<span># and actions. You've already seen the BEGIN pattern. Other</span>
<span># patterns are used only if you're processing lines from files or standard</span>
<span># input.</span>
<span>#</span>
<span># When you pass arguments to AWK, they are treated as file names to process.</span>
<span># It will process them all, in order. Think of it like an implicit for loop,</span>
<span># iterating over the lines in these files. these patterns and actions are like</span>
<span># switch statements inside the loop. </span>

<span>/^fo+bar$/</span> <span>{</span>

    <span># This action will execute for every line that matches the regular</span>
    <span># expression, /^fo+bar$/, and will be skipped for any line that fails to</span>
    <span># match it. Let's just print the line:</span>

    <span>print</span><span>;</span>

    <span># Whoa, no argument! That's because print has a default argument: $0.</span>
    <span># $0 is the name of the current line being processed. It is created</span>
    <span># automatically for you.</span>

    <span># You can probably guess there are other $ variables. Every line is</span>
    <span># implicitly split before every action is called, much like the shell</span>
    <span># does. And, like the shell, each field can be access with a dollar sign</span>

    <span># This will print the second and fourth fields in the line</span>
    <span>print</span> <span>$</span><span>2</span><span>,</span> <span>$</span><span>4</span><span>;</span>

    <span># AWK automatically defines many other variables to help you inspect and</span>
    <span># process each line. The most important one is NF</span>

    <span># Prints the number of fields on this line</span>
    <span>print</span> <span>NF</span><span>;</span>

    <span># Print the last field on this line</span>
    <span>print</span> <span>$</span><span>NF</span><span>;</span>
<span>}</span>

<span># Every pattern is actually a true/false test. The regular expression in the</span>
<span># last pattern is also a true/false test, but part of it was hidden. If you</span>
<span># don't give it a string to test, it will assume $0, the line that it's</span>
<span># currently processing. Thus, the complete version of it is this:</span>

<span>$</span><span>0</span> <span>~</span> <span>/^fo+bar$/</span> <span>{</span>
    <span>print</span> <span>"Equivalent to the last pattern"</span><span>;</span>
<span>}</span>

<span>a</span> <span>&gt;</span> <span>0</span> <span>{</span>
    <span># This will execute once for each line, as long as a is positive</span>
<span>}</span>

<span># You get the idea. Processing text files, reading in a line at a time, and</span>
<span># doing something with it, particularly splitting on a delimiter, is so common</span>
<span># in UNIX that AWK is a scripting language that does all of it for you, without</span>
<span># you needing to ask. All you have to do is write the patterns and actions</span>
<span># based on what you expect of the input, and what you want to do with it.</span>

<span># Here's a quick example of a simple script, the sort of thing AWK is perfect</span>
<span># for. It will read a name from standard input and then will print the average</span>
<span># age of everyone with that first name. Let's say you supply as an argument the</span>
<span># name of a this data file:</span>
<span>#</span>
<span># Bob Jones 32</span>
<span># Jane Doe 22</span>
<span># Steve Stevens 83</span>
<span># Bob Smith 29</span>
<span># Bob Barker 72</span>
<span>#</span>
<span># Here's the script:</span>

<span>BEGIN</span> <span>{</span>

    <span># First, ask the user for the name</span>
    <span>print</span> <span>"What name would you like the average age for?"</span><span>;</span>

    <span># Get a line from standard input, not from files on the command line</span>
    <span>getline</span> <span>name</span> <span>&lt;</span> <span>"/dev/stdin"</span><span>;</span>
<span>}</span>

<span># Now, match every line whose first field is the given name</span>
<span>$</span><span>1</span> <span>==</span> <span>name</span> <span>{</span>

    <span># Inside here, we have access to a number of useful variables, already</span>
    <span># pre-loaded for us:</span>
    <span># $0 is the entire line</span>
    <span># $3 is the third field, the age, which is what we're interested in here</span>
    <span># NF is the number of fields, which should be 3</span>
    <span># NR is the number of records (lines) seen so far</span>
    <span># FILENAME is the name of the file being processed</span>
    <span># FS is the field separator being used, which is " " here</span>
    <span># ...etc. There are plenty more, documented in the man page.</span>

    <span># Keep track of a running total and how many lines matched</span>
    <span>sum</span> <span>+=</span> <span>$</span><span>3</span><span>;</span>
    <span>nlines</span><span>++</span><span>;</span>
<span>}</span>

<span># Another special pattern is called END. It will run after processing all the</span>
<span># text files. Unlike BEGIN, it will only run if you've given it input to</span>
<span># process. It will run after all the files have been read and processed</span>
<span># according to the rules and actions you've provided. The purpose of it is</span>
<span># usually to output some kind of final report, or do something with the</span>
<span># aggregate of the data you've accumulated over the course of the script.</span>

<span>END</span> <span>{</span>
    <span>if</span> <span>(</span><span>nlines</span><span>)</span>
        <span>print</span> <span>"The average age for "</span> <span>name</span> <span>" is "</span> <span>sum</span> <span>/</span> <span>nlines</span><span>;</span>
<span>}</span>
</pre><p><span>&nbsp;</span></p></div>]]></description>
	<dc:creator>BioJoker</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/news/view/396/bioinformatics-introduction-to-perl</guid>
	<pubDate>Thu, 11 Jul 2013 09:49:37 -0500</pubDate>
	<link>https://bioinformaticsonline.com/news/view/396/bioinformatics-introduction-to-perl</link>
	<title><![CDATA[Bioinformatics: Introduction to PERL]]></title>
	<description><![CDATA[<p>This course is aimed at those new to programming and provides an introduction to programming using <strong>Perl</strong>. By the end of this course, attendees should be able to write simple <strong>Perl</strong> programs and to understand more complex <strong>Perl</strong> programs written by others. The course will be taught using the online <a href="http://sofiarobb.com/learning-perl-toc/" title="http://sofiarobb.com/learning-perl-toc/">Learning Perl</a> materials created by <a href="http://stajich.bioinformatics.ucr.edu/members/sofia-robb" title="http://stajich.bioinformatics.ucr.edu/members/sofia-robb">Sofia Robb</a> of the <a href="http://www.ucr.edu/" title="http://www.ucr.edu/">University of California Riverside</a>. Further information is <a href="http://ruddles.bio.cam.ac.uk/%7Edpjudge/Descriptions/PERL.php" title="http://ruddles.bio.cam.ac.uk/~dpjudge/Descriptions/PERL.php">available</a>.</p>]]></description>
	<dc:creator>Archana Malhotra</dc:creator>
</item>
<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/news/view/1494/perl-maven-tutorial-by-gabor-szabo</guid>
	<pubDate>Fri, 09 Aug 2013 05:43:10 -0500</pubDate>
	<link>https://bioinformaticsonline.com/news/view/1494/perl-maven-tutorial-by-gabor-szabo</link>
	<title><![CDATA[Perl Maven tutorial by Gabor Szabo]]></title>
	<description><![CDATA[<p>I personally reccoment this tutorial for Perl users.</p><p>More detail http://perlmaven.com/</p>]]></description>
	<dc:creator>Jitendra Narayan</dc:creator>
</item>

</channel>
</rss>