一些perl的小技巧

刘小泽写于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!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 标题: Rakudo and NQP Internals子标题: The guts tormented imple...
    焉知非鱼阅读 1,342评论 1 3
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,719评论 0 10
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 那天得知到澳門出差的時候心裡其實不抱有太多期待,畢竟是出差,沒想到玩的事,原先也打算當天馬上返程的。後來是南提醒了...
    IceyPeng阅读 416评论 0 0