Shell编程:获取文件前缀字符串

比如处理名为 /xxx/yyy/zzz/abc2017.1.fq.gz 的文件,我们需要获取abc2017这个文件名。

i=/xxx/yyy/zzz/abc2017.1.fq.gz

IN=$i      
# read1文件绝对路径:/xxx/yyy/zzz/abc2017.1.fq.gz

path=${IN%/*}        
# Read1文件的绝对路径前缀,以“/”作为分隔界限并获取界限之前的字符串:/xxx/yyy/zzz

sample=${path##*/}       
# Read1所在文件夹名称,即 zzz

prefix=${IN%.1*}             
# Read1与Read2两个文件共有的路径前缀,即以“.1”作为分隔界限并获取界限之前的字符串 /xxx/yyy/zzz/abc2017

sample=${prefix##*/}   
# sample的名称 abc2017
发表在 Bioinformatics, Linux

shellcheck: 自动检测shell脚本的语法

生物信息分析工作中,可以将数据操作命令写入shell脚本,一方面方便自动化运行,另一方面是将操作记录存档,便于日后查阅。

但是shell脚本也会因人为疏忽而存在错误,我想有没有程序可以检测脚本的正确性呢,一查果然有shellcheck之类的程序。shellcheck有在线版:http://www.shellcheck.net/

shellcheck也有本地版,安装有多种方法,可参考官方网站:https://github.com/koalaman/shellcheck

我直接下载了编译好的程序:https://storage.googleapis.com/shellcheck/shellcheck-latest.linux.x86_64.tar.xz

解压之后,即可使用。

使用方法:shellcheck myscript.sh

 

 

发表在 Linux

Shell脚本 “set Illegal option -o pipefail”

在Linux编写Shell 脚本程序的时候,set -o pipefail是很实用的命令。因为Shell脚本中通常有一连串的动作需要执行,一旦某个环节出错,如果设定了pipefail,脚本会立即中断运行;而如果没有设定,脚本将继续执行后续命令,可能造成错误。

然而在Ubuntu中,当使用“set -o pipefail”的时候,一直报错:

set Illegal option -o pipefail

经查,原因是Ubuntu的 shell 默认安装的是 dash,而不是 bash。
运行以下命令查看 sh 的详细信息,确认 shell 对应的程序是哪个:
$ls -al /bin/sh

dash 比 bash 更轻,更快。但 bash 却更常用。
如果一些命令、脚本等总不能正常执行,有可能是 dash 的原因。
比如编译 Android 源代码的时候,如果使用 dash,则有可能编译出错,或者编译的系统不能启动。

通过以下方式可以使 shell 切换回 bash:
$sudo dpkg-reconfigure dash
然后选择 no 或者 否 ,并确认。
这样做将重新配置 dash,并使其不作为默认的 shell 工具。

也可以直接修改 /bin/sh 链接文件,将其指定到 /bin/bash:
$sudo ln -fs /bin/bash /bin/sh Read more ›

发表在 Bioinformatics, Linux

恒生银行信用卡Cash Dollar优惠登记

由2017年7月1日至2018年6月30日,憑大學/大專聯營信用卡只需登記1次^,由登記月份起作以下簽賬交易,均可賺取高達5倍Cash Dollars:

1)拨打29986038,选择语言,点3选英语;
2)选3,教育优惠Cash Dollar登记;
3)输入16位信用卡账户,以“#”(pound)结束;
4)收到语音提示之后,按“1”确认;
5)收到语音播报七位数Reference Number,然后会提示是否结束服务,按“9”即结束服务。

参考:
http://www.hangseng.com/cms/emkt/pmo/grp05/p10/chi/index.html

细则

大 學 / 大 專 聯 營 信 用 卡 「 高 達 5x Cash Dollars 自 我 增 值 獎 賞 」

優惠期由2017年7月1日至2018年6月30日(「優惠期」)。

客戶於優惠期內致電2998 6038登記1次,成功登記後,憑大學/大專聯營信用卡於登記之月份至2018年6月30日內之合資格交易均可享有高達5倍恒生信用卡Cash Dollars(包括原有之基本Cash Dollars)。[案:去年登記過的,今年需要重新登記。

適用於5倍恒生信用卡Cash Dollars之合資格交易包括:(i)於本地或網上書店購物及/或(ii)支付本地及海外公開考試費用;適用於3倍恒生信用卡Cash Dollars之合資格交易包括:報讀本地及海外各大院校辦學機構舉辦之課程,根據持續進修基金可獲發還款項課程名單為準,並成功於2018年7月16日或之前誌賬於信用卡戶口內之簽賬。

每個成功登記之信用卡戶口於優惠期內最多只可額外獲享合共$300 Cash Dollars,包括(i)於本地或網上書店購物及/或(ii)支付本地及海外公開考試費用而額外獲享之$200 Cash Dollars及報讀本地及海外各大院校辦學機構舉辦之課程,根據持續進修基金可獲發還款項課程名單為準,而額外獲享之簽賬以同一信用卡戶口計算,包括以同一主卡戶口過賬之附屬卡之簽賬。

以每次單一簽賬計算及所獲取之Cash Dollars以整數為單位,不足$1 Cash Dollar則不獲計算。

附:CUHK缴学费的流程。

第一,先去登记3X cash dollar,如上文。
第二,登入你的恒生e-banking,点账户服务→缴付账单→缴帐→新增;商户
商户类别:Education Institutions
商户:The Chinese University of Hong Kong
账单户口号码:进入中大CUSIS→make a payment→pay amount→next,之后有一个Payment Reference,就是这个。
账单类别:01 Tuition,Hostel...
金额:xxx(学费金额)
支账户口:选择信用卡户口,会有信用卡号码,别点成储蓄卡户口。
点击付款确认就ok了。
发表在 Life

Infernal和hmmer程序的安装

再Rfam数据库对small RNA进行注释的过程中需要用到Infernal,但是安装遇到问题。configure之后,make不成功,报错“fatal error: config.h: No such file”,下面是解决方案。

hmmer就是一款比对软件,类似于blast等,它使用马尔可夫概率模型的方法。HMMER的目的是更准确的探测到远程同源序列,它提供的比对结果要比blast更加精确,相应的速度也要慢。在功能基因研究中需要使用到序列搜索,比如从序列数据库中,找同源的序列,或者对一个新的基因功能进行鉴定,使用hmmer比使用blast有着更高的灵敏度以及更高的搜索速度,但其应用还远没有blast普及。

hmmer安装的参考资料是:

curl -O ftp://selab.janelia.org/pub/software/hmmer3/3.1b1/hmmer-3.1b1.tar.gz
tar xzf hmmer-3.1b1.tar.gz
cd hmmer-3.1b1/
./configure --prefix=/usr && make && make install

但是我安装过程中报错:

make[2]: Entering directory '/home/fenglei/local/app/infernal/easel/miniapps'
 CC esl-afetch.o
 GEN esl-afetch
 CC esl-alimanip.o
In file included from /home/fenglei/local/include/assert.h:5:0,
 from esl-alimanip.c:8:
/home/fenglei/local/include/except.h:5:44: fatal error: config.h: No such file or directory
 #include  /* For HAVE_PTHREAD */
 ^
compilation terminated.
make[2]: *** [Makefile:123: esl-alimanip.o] Error 1
make[2]: Leaving directory '/home/fenglei/local/app/infernal/easel/miniapps'
make[1]: *** [Makefile:377: all] Error 2
make[1]: Leaving directory '/home/fenglei/local/app/infernal/easel'
make: *** [Makefile:103: all] Error 2 

原因:

现在较新的内核已经弃用了config.h,把这个文件新建上去即可。

解决办法:执行命令(注意路径的不同):

cd easel
vi config.h

在vi界面输入下述内容,随后保存退出。

 #ifndef _LINUX_CONFIG_H
 #define _LINUX_CONFIG_H
 #endif

随后成功安装。

make && make install

参考资料
http://2013-caltech-workshop.readthedocs.io/en/latest/prokka-annotation.html
https://lzw.me/a/linux-config-no-such-file-or-directory.html/comment-page-1#comment-80998

发表在 Bioinformatics, Linux

基因组|N50与N90的统计

背景

基因组组装的过程中,N50与N90是常用的评价指标。

方法

可以使用NGS QC Toolkit实现统计。
下载地址:
http://59.163.192.90:8080/ngsqctoolkit/

perl N50Stat.pl -i in.fa -o out.stat

N50Stat.pl

Tool to generate statistics for read/sequence data given in FASTA format (total number of reads/sequences, total bases and minimum, maximum, average, median, N25, N50, N75, N90 and N95 read/sequence length)

Citation

Patel RK, Jain M (2012). NGS QC Toolkit: A toolkit for quality control of next generation sequencing data. PLoS ONE, 7(2): e30619.

发表在 Bioinformatics

Mac OS X使用chflags命令隐藏文件

转载:Mac OS X如何使用chflags快速隐藏文件

Mac OS X 自带的命令行隐藏文件方法,使用chflags即可完成,打开终端程序,输入如下命令:

chflags hidden 文件绝对路径/ 相对路径

这样就设置隐藏属性了,进入相应的文件夹之后看不到该文件了。但是此时在Mac的『我的所有文件』下还是能看到被隐藏的文件,这是进入「系统偏好设置」-「Spotlight」-「隐私」- 添加被隐藏的文件夹或文件。

或是输入:chflags hidden [],再将文件直接拖入terminal的“[]”中也可。

重新显示文件使用:

chflags nohidden /xxx/yyy/file

再来回顾一下显示/隐藏finder所有隐藏文件的命令:

defaults write com.apple.finder AppleShowAllFiles -bool true(false) – killall finder(重启finder)

false 表示不显示『隐藏的文件』;true表示显示『隐藏的文件』。

发表在 Linux