<?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: PerlOneLiner for Bioinformatician]]></title>
	<link>https://bioinformaticsonline.com/pages/view/35176/perloneliner-for-bioinformatician?</link>
	<atom:link href="https://bioinformaticsonline.com/pages/view/35176/perloneliner-for-bioinformatician?" rel="self" type="application/rss+xml" />
	<description><![CDATA[]]></description>
	
	<item>
	<guid isPermaLink="true">https://bioinformaticsonline.com/pages/view/35176/perloneliner-for-bioinformatician</guid>
	<pubDate>Mon, 15 Jan 2018 04:57:40 -0600</pubDate>
	<link>https://bioinformaticsonline.com/pages/view/35176/perloneliner-for-bioinformatician</link>
	<title><![CDATA[PerlOneLiner for Bioinformatician]]></title>
	<description><![CDATA[<p>FILE SPACING<br />------------</p><p># Double space a file<br />perl -pe '$\="\n"'<br />perl -pe 'BEGIN { $\="\n" }'<br />perl -pe '$_ .= "\n"'<br />perl -pe 's/$/\n/'<br />perl -nE 'say'</p><p># Double space a file, except the blank lines<br />perl -pe '$_ .= "\n" unless /^$/'<br />perl -pe '$_ .= "\n" if /\S/'</p><p># Triple space a file<br />perl -pe '$\="\n\n"'<br />perl -pe '$_.="\n\n"'</p><p># N-space a file<br />perl -pe '$_.="\n"x7'</p><p># Add a blank line before every line<br />perl -pe 's//\n/'</p><p># Remove all blank lines<br />perl -ne 'print unless /^$/'<br />perl -lne 'print if length'<br />perl -ne 'print if /\S/'</p><p># Remove all consecutive blank lines, leaving just one<br />perl -00 -pe ''<br />perl -00pe0</p><p># Compress/expand all blank lines into N consecutive ones<br />perl -00 -pe '$_.="\n"x4'</p><p># Fold a file so that every set of 10 lines becomes one tab-separated line<br />perl -lpe '$\ = $. % 10 ? "\t" : "\n"'</p><p><br />LINE NUMBERING<br />--------------</p><p># Number all lines in a file<br />perl -pe '$_ = "$. $_"'</p><p># Number only non-empty lines in a file<br />perl -pe '$_ = ++$a." $_" if /./'</p><p># Number and print only non-empty lines in a file (drop empty lines)<br />perl -ne 'print ++$a." $_" if /./'</p><p># Number all lines but print line numbers only non-empty lines<br />perl -pe '$_ = "$. $_" if /./'</p><p># Number only lines that match a pattern, print others unmodified<br />perl -pe '$_ = ++$a." $_" if /regex/'</p><p># Number and print only lines that match a pattern<br />perl -ne 'print ++$a." $_" if /regex/'</p><p># Number all lines, but print line numbers only for lines that match a pattern<br />perl -pe '$_ = "$. $_" if /regex/'</p><p># Number all lines in a file using a custom format (emulate cat -n)<br />perl -ne 'printf "%-5d %s", $., $_'</p><p># Print the total number of lines in a file (emulate wc -l)<br />perl -lne 'END { print $. }'<br />perl -le 'print $n=()=&lt;&gt;'<br />perl -le 'print scalar(()=&lt;&gt;)'<br />perl -le 'print scalar(@foo=&lt;&gt;)'<br />perl -ne '}{print $.'<br />perl -nE '}{say $.'</p><p># Print the number of non-empty lines in a file<br />perl -le 'print scalar(grep{/./}&lt;&gt;)'<br />perl -le 'print ~~grep{/./}&lt;&gt;'<br />perl -le 'print~~grep/./,&lt;&gt;'<br />perl -E 'say~~grep/./,&lt;&gt;'</p><p># Print the number of empty lines in a file<br />perl -lne '$a++ if /^$/; END {print $a+0}'<br />perl -le 'print scalar(grep{/^$/}&lt;&gt;)'<br />perl -le 'print ~~grep{/^$/}&lt;&gt;'<br />perl -E 'say~~grep{/^$/}&lt;&gt;'</p><p># Print the number of lines in a file that match a pattern (emulate grep -c)<br />perl -lne '$a++ if /regex/; END {print $a+0}'<br />perl -nE '$a++ if /regex/; END {say $a+0}'</p><p><br />CALCULATIONS<br />------------</p><p># Check if a number is a prime<br />perl -lne '(1x$_) !~ /^1?$|^(11+?)\1+$/ &amp;&amp; print "$_ is prime"'</p><p># Print the sum of all the fields on a line<br />perl -MList::Util=sum -alne 'print sum @F'</p><p># Print the sum of all the fields on all lines<br />perl -MList::Util=sum -alne 'push @S,@F; END { print sum @S }'<br />perl -MList::Util=sum -alne '$s += sum @F; END { print $s }'</p><p># Shuffle all fields on a line<br />perl -MList::Util=shuffle -alne 'print "@{[shuffle @F]}"'<br />perl -MList::Util=shuffle -alne 'print join " ", shuffle @F'</p><p># Find the minimum element on a line<br />perl -MList::Util=min -alne 'print min @F'</p><p># Find the minimum element over all the lines<br />perl -MList::Util=min -alne '@M = (@M, @F); END { print min @M }'<br />perl -MList::Util=min -alne '$min = min @F; $rmin = $min unless defined $rmin &amp;&amp; $min &gt; $rmin; END { print $rmin }'</p><p># Find the maximum element on a line<br />perl -MList::Util=max -alne 'print max @F'</p><p># Find the maximum element over all the lines<br />perl -MList::Util=max -alne '@M = (@M, @F); END { print max @M }'</p><p># Replace each field with its absolute value<br />perl -alne 'print "@{[map { abs } @F]}"'</p><p># Find the total number of fields (words) on each line<br />perl -alne 'print scalar @F'</p><p># Print the total number of fields (words) on each line followed by the line<br />perl -alne 'print scalar @F, " $_"'</p><p># Find the total number of fields (words) on all lines<br />perl -alne '$t += @F; END { print $t}'</p><p># Print the total number of fields that match a pattern<br />perl -alne 'map { /regex/ &amp;&amp; $t++ } @F; END { print $t }'<br />perl -alne '$t += /regex/ for @F; END { print $t }'<br />perl -alne '$t += grep /regex/, @F; END { print $t }'</p><p># Print the total number of lines that match a pattern<br />perl -lne '/regex/ &amp;&amp; $t++; END { print $t }'</p><p># Print the number PI to n decimal places<br />perl -Mbignum=bpi -le 'print bpi(n)'</p><p># Print the number PI to 39 decimal places<br />perl -Mbignum=PI -le 'print PI'</p><p># Print the number E to n decimal places<br />perl -Mbignum=bexp -le 'print bexp(1,n+1)'</p><p># Print the number E to 39 decimal places<br />perl -Mbignum=e -le 'print e'</p><p># Print UNIX time (seconds since Jan 1, 1970, 00:00:00 UTC)<br />perl -le 'print time'</p><p># Print GMT (Greenwich Mean Time) and local computer time<br />perl -le 'print scalar gmtime'<br />perl -le 'print scalar localtime'</p><p># Print local computer time in H:M:S format<br />perl -le 'print join ":", (localtime)[2,1,0]'</p><p># Print yesterday's date<br />perl -MPOSIX -le '@now = localtime; $now[3] -= 1; print scalar localtime mktime @now'</p><p># Print date 14 months, 9 days and 7 seconds ago<br />perl -MPOSIX -le '@now = localtime; $now[0] -= 7; $now[4] -= 14; $now[7] -= 9; print scalar localtime mktime @now'</p><p># Prepend timestamps to stdout (GMT, localtime)<br />tail -f logfile | perl -ne 'print scalar gmtime," ",$_'<br />tail -f logfile | perl -ne 'print scalar localtime," ",$_'</p><p># Calculate factorial of 5<br />perl -MMath::BigInt -le 'print Math::BigInt-&gt;new(5)-&gt;bfac()'<br />perl -le '$f = 1; $f *= $_ for 1..5; print $f'</p><p># Calculate greatest common divisor (GCM)<br />perl -MMath::BigInt=bgcd -le 'print bgcd(@list_of_numbers)'</p><p># Calculate GCM of numbers 20 and 35 using Euclid's algorithm<br />perl -le '$n = 20; $m = 35; ($m,$n) = ($n,$m%$n) while $n; print $m'</p><p># Calculate least common multiple (LCM) of numbers 35, 20 and 8<br />perl -MMath::BigInt=blcm -le 'print blcm(35,20,8)'</p><p># Calculate LCM of 20 and 35 using Euclid's formula: n*m/gcd(n,m)<br />perl -le '$a = $n = 20; $b = $m = 35; ($m,$n) = ($n,$m%$n) while $n; print $a*$b/$m'</p><p># Generate 10 random numbers between 5 and 15 (excluding 15)<br />perl -le '$n=10; $min=5; $max=15; $, = " "; print map { int(rand($max-$min))+$min } 1..$n'</p><p># Find and print all permutations of a list<br />perl -MAlgorithm::Permute -le '$l = [1,2,3,4,5]; $p = Algorithm::Permute-&gt;new($l); print @r while @r = $p-&gt;next'</p><p># Generate the power set<br />perl -MList::PowerSet=powerset -le '@l = (1,2,3,4,5); for (@{powerset(@l)}) { print "@$_" }'</p><p># Convert an IP address to unsigned integer<br />perl -le '$i=3; $u += ($_&lt;&lt;8*$i--) for "127.0.0.1" =~ /(\d+)/g; print $u'<br />perl -le '$ip="127.0.0.1"; $ip =~ s/(\d+)\.?/sprintf("%02x", $1)/ge; print hex($ip)'<br />perl -le 'print unpack("N", 127.0.0.1)'<br />perl -MSocket -le 'print unpack("N", inet_aton("127.0.0.1"))'</p><p># Convert an unsigned integer to an IP address<br />perl -MSocket -le 'print inet_ntoa(pack("N", 2130706433))'<br />perl -le '$ip = 2130706433; print join ".", map { (($ip&gt;&gt;8*($_))&amp;0xFF) } reverse 0..3'<br />perl -le '$ip = 2130706433; $, = "."; print map { (($ip&gt;&gt;8*($_))&amp;0xFF) } reverse 0..3'</p><p><br />STRING CREATION AND ARRAY CREATION<br />----------------------------------</p><p># Generate and print the alphabet<br />perl -le 'print a..z'<br />perl -le 'print ("a".."z")'<br />perl -le '$, = ","; print ("a".."z")'<br />perl -le 'print join ",", ("a".."z")'</p><p># Generate and print all the strings from "a" to "zz"<br />perl -le 'print ("a".."zz")'<br />perl -le 'print "aa".."zz"'</p><p># Create a hex lookup table<br />@hex = (0..9, "a".."f")</p><p># Convert a decimal number to hex using @hex lookup table<br />perl -le '$num = 255; @hex = (0..9, "a".."f"); while ($num) { $s = $hex[($num%16)&amp;15].$s; $num = int $num/16 } print $s'<br />perl -le '$hex = sprintf("%x", 255); print $hex'<br />perl -le '$num = "ff"; print hex $num'</p><p># Generate a random 8 character password<br />perl -le 'print map { ("a".."z")[rand 26] } 1..8'<br />perl -le 'print map { ("a".."z", 0..9)[rand 36] } 1..8'</p><p># Create a string of specific length<br />perl -le 'print "a"x50'</p><p># Create a repeated list of elements<br />perl -le '@list = (1,2)x20; print "@list"'</p><p># Create an array from a string<br />@months = split ' ', "Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec"<br />@months = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/</p><p># Create a string from an array<br />@stuff = ("hello", 0..9, "world"); $string = join '-', @stuff</p><p># Find the numeric values for characters in the string<br />perl -le 'print join ", ", map { ord } split //, "hello world"'</p><p># Convert a list of numeric ASCII values into a string<br />perl -le '@ascii = (99, 111, 100, 105, 110, 103); print pack("C*", @ascii)'<br />perl -le '@ascii = (99, 111, 100, 105, 110, 103); print map { chr } @ascii'</p><p># Generate an array with odd numbers from 1 to 100<br />perl -le '@odd = grep {$_ % 2 == 1} 1..100; print "@odd"'<br />perl -le '@odd = grep { $_ &amp; 1 } 1..100; print "@odd"'</p><p># Generate an array with even numbers from 1 to 100<br />perl -le '@even = grep {$_ % 2 == 0} 1..100; print "@even"'</p><p># Find the length of the string<br />perl -le 'print length "one-liners are great"'</p><p># Find the number of elements in an array<br />perl -le '@array = ("a".."z"); print scalar @array'<br />perl -le '@array = ("a".."z"); print $#array + 1'</p><p><br />TEXT CONVERSION AND SUBSTITUTION<br />--------------------------------</p><p># ROT13 a string<br />'y/A-Za-z/N-ZA-Mn-za-m/'</p><p># ROT 13 a file<br />perl -lpe 'y/A-Za-z/N-ZA-Mn-za-m/' file</p><p># Base64 encode a string<br />perl -MMIME::Base64 -e 'print encode_base64("string")'<br />perl -MMIME::Base64 -0777 -ne 'print encode_base64($_)' file</p><p># Base64 decode a string<br />perl -MMIME::Base64 -le 'print decode_base64("base64string")'<br />perl -MMIME::Base64 -ne 'print decode_base64($_)' file</p><p># URL-escape a string<br />perl -MURI::Escape -le 'print uri_escape($string)'</p><p># URL-unescape a string<br />perl -MURI::Escape -le 'print uri_unescape($string)'</p><p># HTML-encode a string<br />perl -MHTML::Entities -le 'print encode_entities($string)'</p><p># HTML-decode a string<br />perl -MHTML::Entities -le 'print decode_entities($string)'</p><p># Convert all text to uppercase<br />perl -nle 'print uc'<br />perl -ple '$_=uc'<br />perl -nle 'print "\U$_"'</p><p># Convert all text to lowercase<br />perl -nle 'print lc'<br />perl -ple '$_=lc'<br />perl -nle 'print "\L$_"'</p><p># Uppercase only the first word of each line<br />perl -nle 'print ucfirst lc'<br />perl -nle 'print "\u\L$_"'</p><p># Invert the letter case<br />perl -ple 'y/A-Za-z/a-zA-Z/'</p><p># Camel case each line<br />perl -ple 's/(\w+)/\u$1/g'<br />perl -ple 's/(?&lt;!['])(\w+)/\u\1/g'</p><p># Strip leading whitespace (spaces, tabs) from the beginning of each line<br />perl -ple 's/^[ \t]+//'<br />perl -ple 's/^\s+//'</p><p># Strip trailing whitespace (space, tabs) from the end of each line<br />perl -ple 's/[ \t]+$//'</p><p># Strip whitespace from the beginning and end of each line<br />perl -ple 's/^[ \t]+|[ \t]+$//g'</p><p># Convert UNIX newlines to DOS/Windows newlines<br />perl -pe 's|\n|\r\n|'</p><p># Convert DOS/Windows newlines to UNIX newlines<br />perl -pe 's|\r\n|\n|'</p><p># Convert UNIX newlines to Mac newlines<br />perl -pe 's|\n|\r|'</p><p># Substitute (find and replace) "foo" with "bar" on each line<br />perl -pe 's/foo/bar/'</p><p># Substitute (find and replace) all "foo"s with "bar" on each line<br />perl -pe 's/foo/bar/g'</p><p># Substitute (find and replace) "foo" with "bar" on lines that match "baz"<br />perl -pe '/baz/ &amp;&amp; s/foo/bar/'</p><p># Binary patch a file (find and replace a given array of bytes as hex numbers)<br />perl -pi -e 's/\x89\xD8\x48\x8B/\x90\x90\x48\x8B/g' file</p><p><br />SELECTIVE PRINTING AND DELETING OF CERTAIN LINES<br />------------------------------------------------</p><p># Print the first line of a file (emulate head -1)<br />perl -ne 'print; exit'</p><p># Print the first 10 lines of a file (emulate head -10)<br />perl -ne 'print if $. &lt;= 10'<br />perl -ne '$. &lt;= 10 &amp;&amp; print'<br />perl -ne 'print if 1..10'</p><p># Print the last line of a file (emulate tail -1)<br />perl -ne '$last = $_; END { print $last }'<br />perl -ne 'print if eof'</p><p># Print the last 10 lines of a file (emulate tail -10)<br />perl -ne 'push @a, $_; @a = @a[@a-10..$#a]; END { print @a }'</p><p># Print only lines that match a regular expression<br />perl -ne '/regex/ &amp;&amp; print'</p><p># Print only lines that do not match a regular expression<br />perl -ne '!/regex/ &amp;&amp; print'</p><p># Print the line before a line that matches a regular expression<br />perl -ne '/regex/ &amp;&amp; $last &amp;&amp; print $last; $last = $_'</p><p># Print the line after a line that matches a regular expression<br />perl -ne 'if ($p) { print; $p = 0 } $p++ if /regex/'</p><p># Print lines that match regex AAA and regex BBB in any order<br />perl -ne '/AAA/ &amp;&amp; /BBB/ &amp;&amp; print'</p><p># Print lines that don't match match regexes AAA and BBB<br />perl -ne '!/AAA/ &amp;&amp; !/BBB/ &amp;&amp; print'</p><p># Print lines that match regex AAA followed by regex BBB followed by CCC<br />perl -ne '/AAA.*BBB.*CCC/ &amp;&amp; print'</p><p># Print lines that are 80 chars or longer<br />perl -ne 'print if length &gt;= 80'</p><p># Print lines that are less than 80 chars in length<br />perl -ne 'print if length &lt; 80'</p><p># Print only line 13<br />perl -ne '$. == 13 &amp;&amp; print &amp;&amp; exit'</p><p># Print all lines except line 27<br />perl -ne '$. != 27 &amp;&amp; print'<br />perl -ne 'print if $. != 27'</p><p># Print only lines 13, 19 and 67<br />perl -ne 'print if $. == 13 || $. == 19 || $. == 67'<br />perl -ne 'print if int($.) ~~ (13, 19, 67)'</p><p># Print all lines between two regexes (including lines that match regex)<br />perl -ne 'print if /regex1/../regex2/'</p><p># Print all lines from line 17 to line 30<br />perl -ne 'print if $. &gt;= 17 &amp;&amp; $. &lt;= 30'<br />perl -ne 'print if int($.) ~~ (17..30)'<br />perl -ne 'print if grep { $_ == $. } 17..30'</p><p># Print the longest line<br />perl -ne '$l = $_ if length($_) &gt; length($l); END { print $l }'</p><p># Print the shortest line<br />perl -ne '$s = $_ if $. == 1; $s = $_ if length($_) &lt; length($s); END { print $s }'</p><p># Print all lines that contain a number<br />perl -ne 'print if /\d/'</p><p># Find all lines that contain only a number<br />perl -ne 'print if /^\d+$/'</p><p># Print all lines that contain only characters<br />perl -ne 'print if /^[[:alpha:]]+$/</p><p># Print every second line<br />perl -ne 'print if $. % 2'</p><p># Print every second line, starting the second line<br />perl -ne 'print if $. % 2 == 0'</p><p># Print all lines that repeat<br />perl -ne 'print if ++$a{$_} == 2'</p><p># Print all unique lines<br />perl -ne 'print unless $a{$_}++'</p><p># Print the first field (word) of every line (emulate cut -f 1 -d ' ')<br />perl -alne 'print $F[0]'</p><p><br />HANDY REGULAR EXPRESSIONS<br />-------------------------</p><p># Match something that looks like an IP address<br />/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/<br />/^(\d{1,3}\.){3}\d{1,3}$/</p><p># Test if a number is in range 0-255<br />/^([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/</p><p># Match an IP address<br />my $ip_part = qr|([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])|;<br />if ($ip =~ /^($ip_part\.){3}$ip_part$/) {<br /> say "valid ip";<br />}</p><p># Check if the string looks like an email address<br />/\S+@\S+\.\S+/</p><p># Check if the string is a decimal number<br />/^\d+$/<br />/^[+-]?\d+$/<br />/^[+-]?\d+\.?\d*$/</p><p># Check if the string is a hexadecimal number<br />/^0x[0-9a-f]+$/i</p><p># Check if the string is an octal number<br />/^0[0-7]+$/</p><p># Check if the string is binary<br />/^[01]+$/</p><p># Check if a word appears twice in the string<br />/(word).*\1/</p><p># Increase all numbers by one in the string<br />$str =~ s/(\d+)/$1+1/ge</p><p># Extract HTTP User-Agent string from the HTTP headers<br />/^User-Agent: (.+)$/</p><p># Match printable ASCII characters<br />/[ -~]/</p><p># Match unprintable ASCII characters<br />/[^ -~]/</p><p># Match text between two HTML tags<br />m|&lt;strong&gt;([^&lt;]*)&lt;/strong&gt;|<br />m|&lt;strong&gt;(.*?)&lt;/strong&gt;|</p><p># Replace all &lt;b&gt; tags with &lt;strong&gt;<br />$html =~ s|&lt;(/)?b&gt;|&lt;$1strong&gt;|g</p><p># Extract all matches from a regular expression<br />my @matches = $text =~ /regex/g;</p><p><br />PERL TRICKS<br />-----------</p><p># Print the version of a Perl module<br />perl -MModule -le 'print $Module::VERSION'<br />perl -MLWP::UserAgent -le 'print $LWP::UserAgent::VERSION'</p>]]></description>
	<dc:creator>Shruti Paniwala</dc:creator>
</item>

</channel>
</rss>