一些perl的小技巧

作者: 刘小泽 | 来源:发表于2018-12-02 18:46 被阅读115次

刘小泽写于18.12.2

这个周末做了不少事,参加了P4 China精准医疗会议,第一次参加这种国际性会议,长了不少见识,同时带回来很厚一摞“背景知识” 来学习(各个公司的手册,这个词是和jimmy学的😂,学无止境,学无止境);
周六下午参加了生信技能树举办的小party,认识了一帮志同道合的小伙伴,还有当时学习转录组时默默关注的“青山屋主”老师。可能大家做的方向不同,但是能感受到那份共同对于生信的热情和相互学习的动力;另外从熊那里学到了新的Evernote知识管理体系LTF(List,Tag,Filter),不愧是印象笔记中国区大使,之前也在用evernote,但是没有利用好tag,这次周日用了一天更新了自己的知识库tag,希望日后用的越来越6吧

18.12.1充实的周末

今天看一下关于perl的一些小知识

基本知识

  • 标量$、数组@、哈希%【分别用小括号、中括号、大括号取元素】
  • perl语句都以分号结尾
  • 赋值是从右到左
  • 文本用单引号或者双引号
  • 单引号把其中所有变为文本;双引号可以用转义符
  • 列表用小括号,其中元素逗号分隔
  • perl从0开始计数

perl运算符

# 基本数学运算
print 3 * (5 + 10) - 2**4;  

# 变量运算
$total_error = $false_positive + $false_negative;  

# 增加固定数值
$minutes += 30;      

# 每次加一
$hour++;              

# 每次减一
$remaining--;    

# 重复多少次
$motif = 'CG' x 12;  

# 连接字符串和变量内容
$chr = 'chr' . $roman{$chr_number};   

# 从小到大
@hex = (1..9, a..f);  

perl函数

# 标量函数
$seq_len = length($seq);
$rev_seq = reverse($seq);
$upper_case = uc($seq);
$lower_case = lc($seq);
$codon = substr $seq, 0, 3;

# 去掉结尾空白
chomp $input_line;            

# 数组函数
@array = split //, $string;
$first_element = shift @array; 
$last_element = pop @array;
unshift @array, $first_element;
push @array, $last_element;
@alphabetically_sorted = sort @names;
@numerically_sorted = sort { $a <=> $b } @values;

# 哈希函数
if (defined $description{$gene}) { print $description{$gene} } else { print 'not available'; }
foreach (keys %headers) { print ">$_\n$headers{$_}\n"; }

循环、判断

 '>', '<', '==' 或者'gt', 'lt', 'eq' 
 # 准确查找motif
if (substr($seq, $pos, 10) eq $motif) { print "Motif found at position $pos!\n"; }

# 每一行都变成小写字母再合并
while (<>) { chomp; $seq .= lc $_; }

正则表达

/中展示,通过=~应用,再加上限定(i表示大小写区分;g表示全局比对)

特殊字符比如:字母用'\w',数字用'\d',空格用'\s'【反选用'\D', '\W','\S'

出现次数出现在大括号中,如:'{3}'即3次;'{4,10}'4到10次;'{2,}'两次以上

'+'比对至少一个;'*' 0个或多个;'?' 0个或1个

# search $_ for the word regulator (ignoring case) and print if found
if (/regulator/i) { print;}

# 找非数字字符
if ($input =~ /\D/) { warn "Non-numerical input in '$input'\n"; }

# 移除所有空格
$input =~ s/\s//g;

# CG至少出现3次
if ($input =~ /(CG{3,})/) { print "Found pattern $1!\n"; }

# 将字符串按tab分隔,然后整合到数组
@list = split /\t/, $input;

单行perl

与One-Liner相关的perl参数

-a 自动分隔模式
-F 指定-a的分隔符
-l 对输入的内容进行自动chomp,对输出的内容自动加换行符
-n 相当于while(<>)
-e 执行命令,也就是脚本
-p 自动循环+输出,也就是while(<>){命令(脚本); print;}

perl -e 必须要写
perl -pe 读取每行=》处理=〉输出 ex. perl -pe 's/aaa/AAA/g' 1.txt
perl -ln 效果等于 while(<>){chomp;}
perl -alne 处理tab分割文件 如 perl -alne 'print $F[0]'
perl -ne '/regex/ && print' 打印匹配的行

perl -ne 'print if /foo/' acts a lot like grep foo, 
perl -pe 's/foo/bar/' replaces foo with bar
perl -lpe 's/\s*$//'

几个小例子

perl -e 'print "hello world\n"' #结果加换行符
perl -l -e 'print 2**13' #结果输出到新行
perl -lne '$i++; $in += length($_); END { print "$i lines, $in characters"; }' input.txt #读取文件并统计行数与字符数
perl -lne '$i++; $in += length($_); $w += scalar split /\s+/, $_; END { print "$i lines, $w words, $in characters"; }' input.txt # 增加统计单词数
perl -le 'foreach (1..100) { print rand;}' > random_numbers.txt #1-100取随机数并输出到文件

# 对于逗号分隔的文件,将最后一列提到第一列
perl -F, -lane 'print(join ",", @F[-1,0..$#F-1])' 

# 空格分隔的文件,将第三列降序排列
perl -lane '$s{$F[2]} .= $_; END {foreach (sort { $b <=> $a } kyes %s) {print $s{$_}; }}'

# 改变基因坐标,确保起始位点始终小与终止位点
perl -lane '($F[3],$F[2]) = ($F[2], $F[3]) if ($F[3] lt $F[2]); print (join "\t", @F);' input

欢迎关注我们的公众号~_~  
我们是两个农转生信的小硕,打造生信星球,想让它成为一个不拽术语、通俗易懂的生信知识平台。需要帮助或提出意见请后台留言或发送邮件到Bioplanet520@outlook.com

Welcome to our bioinfoplanet!

相关文章

  • 一些perl的小技巧

    刘小泽写于18.12.2这个周末做了不少事,参加了P4 China精准医疗会议,第一次参加这种国际性会议,长了不少...

  • perl 编程技巧

    Perl 是目前我最熟悉的工作语言,perl中有很多特别实用的小技巧下面我就一一罗列一下: -w-w 启用警告,这...

  • perl One-Liners | perl命令行学习1 -e参

    Perl 命令行参数 -e 说明 前言 之前在知乎上看到别人提问 “你见过哪些令你瞠目结舌的Perl代码技巧?” ...

  • perl学习总结

    先放张图 上面是我总结的思维导图,将perl的一些基本语法,还有简单的注意事项记了下,是看小骆驼学习的perl。 ...

  • perl包的安装

    没有学习过perl语言,但是某些程序需要使用perl,就总结perl的一些包的安装方法在cpan https://...

  • 算法--leetcode-283-移动零

    相当于是使用 for 进行交换的一个小技巧的练习,后面会给出一些算法的小技巧,都是总结的一些算法的小技巧。

  • BGI-College生信入门——6、Perl小骆驼学习笔记(一

    「环境」 -w显示程序中出现的一些警告,方便debug #!/usr/bin/perl-w 「基础语法」 perl...

  • 70个做饭小技巧

    70个做饭小技巧 文/瑶静 今天,向大家分享一些做饭的小技巧。...

  • 2020-04-02

    Perl-小骆驼书~学习笔记 Perl的逻辑:丑则丑矣,效率高啊。吃苦能干,小骆驼也! [TOC] 1.标量数据 ...

  • perl 编程技巧(二)

    今天写程序发现一个以前混淆的概念: 这个用法在写程序中一般是比较常用的,尤其是在写一些输出的日志信息时; 但是在这...

网友评论

    本文标题:一些perl的小技巧

    本文链接:https://www.haomeiwen.com/subject/lrqscqtx.html