Shell Scripting Cheetsheets

A Bioinformatician’s UNIX Toolbox

awk、sed

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 常用
# 数某一列出现次数
awk '{l[$1]++}END{for (x in l) print x,l[x]}'
# 去掉文件末尾的\n
awk 'BEGIN{ORS=""}{print $0}' test.txt > test2.txt
# RS是记录分隔符(句尾),默认的分隔符是\n
# RS修改记录分隔符,ORS修改输出记录分隔符
# FS指定列分隔符,OFS指定列输出分隔符
awk 'BEGIN{OFS="\t"}{print $1,$2}' test1
# tar.gz
.tar.gz 和 .tgz
解压:tar zxf Something.tar.gz
压缩:tar zcf Something.tar.gz DirName
分卷压缩tar.gz: tar zcf - DirName/* |split -d -b 100m - Something.tar.gz.
# 生成文件:Something.tar.gz.00 Something.tar.gz.01 Something.tar.gz.02 ...
解压tar.gz分卷
cat Something.tar.gz.* | tar zx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#取某几列
awk '{print $2,$4,$5}' input.txt > output.txt
cat *log|grep "variants loaded"|awk '{print $1}'|les
# 查看文件有几列
cat in.txt | awk '{print NF}'
# -F 修改分隔符为冒号:
awk -F: '{print $1}' in.txt
awk -F" " '{print $1}' in.txt
# 正则匹配、替换
awk '/^test[0-9]+/' input.txt
awk '$1 ~ /^test[0-9]+/' input.txt
awk '{if($5==66) print $0}' input.txt
sed 's/good/bad/' input.txt # 默认只替换第一个匹配
sed 's/good/bad/2' input.txt # 只替换第二个匹配
sed 's/good/bad/g' input.txt # 替换所有匹配
# 三行程序,以“;”分割
awk '{BASELINE=42; if($1>BASELINE) $5=$5+100; print $0}' data.f
# 几列之间运算 calculate the sum of column 2 and 3 and put it at the end of a row or replace the first column:
awk '{print $0,$2+$3}' input.txt
awk '{$1=$2+$3;print}' input.txt
# 取出文件某几行,比如5-10行
sed -n '10p' data.txt # 打印第十行
sed -n '5,10p' data.txt # 打印第5-10行
sed -n '1-5p' data.txt # 打印第一行,跳过5行,打印第六行
awk 'NR>=5&&NR<=10' data.txt
# 文本、excel文件里面有空的项目不好split的时候,把空的用“-”填充
less input.txt | sed ‘s/\t\t/\t\-\t/g;s/\t$/\t\-/g’ > output.txt
# 输出一个tab分割的文件头
echo "chr pos A1 A2 OR p-value"|awk -v OFS="\t" '{print $1,$2,$3,$4,$5,$6}'


ls长度限制问题 “/bin/ls: Argument list too long”

1
2
find /DirName/ -name *.txt |less -N
for i in DirName/*;do echo "ls $i " >> list.txt;done


rm files in ls/grep

1
ls * | while read dd; do rm -rf $dd; done


tr

1
2
# 把回车都替换成空格
awk '{print $1}' in.txt|tr "\n" " "|less


纵向合并文件

1
paste a.txt b.txt > ab.txt


wc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#显示文件内容信息,输出信息依次是:行数,字数,字节数,文件名称
wc filename
#显示一个文件的行数
wc -l filename
#显示一个文件的字节数
wc -c filename
#显示一个文件的字符数
wc -m filename
#显示一个文件中的最长行的长度
wc -L filename
#注意:每行结尾的换行符也算一个字符,空格也算一个字符
#采用UTF-8编码,所以一个汉字在这里被转换为3字节
#当使用-m选项时,一个汉字就作为一个字符计算


find

1
2
find . -name ‘*.pl’
find /path/dir -regextype "posix-egrep" -regex ".*\.(pl|sh|py|r|pdf|)$"


fasta/fastq/vcf

  • 取fasta中的某一段序列(代替perl里的substr效果)

    1
    samtools faidx hg19.fasta chr1:1-100
  • 为vcf文件建索引,GATK依赖

    1
    2
    samtools/htslib/bgzip -c file.vcf > file.vcf.gz
    samtools/htslib/tabix -p vcf file.vcf.gz


Example header of PBS(qsub) Command Lines

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#$ -S /bin/sh
#$ -e z.1.sh.SuperMem-1.pbs.$JOB_ID.e
#$ -o z.1.sh.SuperMem-1.pbs.$JOB_ID.o
#$ -l vf=1G
#$ -m n
#$ -cwd
#$ -P st_supermem
#$ -q supermem.q@supermem-0-2
# 指定supermem-0-2节点
# start time
date1=`date "+%Y-%m-%d %H:%M:%S"`; date1_sys=`date -d "$date1" +%s`;echo "start running ========= at $date1"
perl test.pl
# end time and running time; output to z.1.sh.SuperMem-1.pbs.$JOB_ID.o
date2=`date "+%Y-%m-%d %H:%M:%S"`; date2_sys=`date -d "$date2" +%s`; interval=`expr $date2_sys - $date1_sys`; hour=`expr $interval / 3600`;left_second=`expr $interval % 3600`; min=`expr $left_second / 60`; second=`expr $interval % 60`; echo "done running ========= at $date2 in $hour hour $min min $second s"


kill

1
2
3
4
5
6
7
8
# 一次杀掉所有进程,慎用
pgrep -u wanglizhong |xargs kill
kill -9 $(ps -ef|grep wanglizhong|awk '{print $2}')
pkill -u wanglizhong
skill -KILL -u username


解压/压缩

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
.tar
解包:tar xvf Something.tar
打包:tar cvf Something.tar DirName
(注:tar是打包,不是压缩!)
———————————————
.gz
解压1:gunzip Something.gz
解压2:gzip -d Something.gz
压缩:gzip Something
.tar.gz 和 .tgz
解压:tar zxf Something.tar.gz
压缩:tar zcf Something.tar.gz DirName
分卷压缩tar.gz: tar zcf - DirName/* |split -d -b 100m - Something.tar.gz.
# 生成文件:Something.tar.gz.00 Something.tar.gz.01 Something.tar.gz.02 ...
解压tar.gz分卷
cat Something.tar.gz.* | tar zx
———————————————
.bz2
解压1:bzip2 -d Something.bz2
解压2:bunzip2 Something.bz2
压缩: bzip2 -z Something
.tar.bz2
解压:tar jxvf Something.tar.bz2
压缩:tar jcvf Something.tar.bz2 DirName
分卷压缩tar.bz2: tar jcf - DirName/* |split -d -b 100m - Something.tar.bz2.
# 生成文件: Something.tar.bz2.00 Something.tar.bz2.01 Something.tar.bz2.02 ...
解压tar.bz2分卷: cat logs.tar.gz* | tar jx
———————————————
.bz
解压1:bzip2 -d Something.bz
解压2:bunzip2 Something.bz
压缩:未知
.tar.bz
解压:tar jxvf Something.tar.bz
压缩:未知
———————————————
.Z
解压:uncompress Something.Z
压缩:compress Something
.tar.Z
解压:tar Zxvf Something.tar.Z
压缩:tar Zcvf Something.tar.Z DirName
———————————————
.zip
解压:unzip Something.zip
压缩:zip Something.zip DirName/*
# 大于2G的文件unzip可能有问题
分卷:split Something.zip -b 100m -d Something2.zip
分解解压:cat Something2.zip* > Something3.zip; unzip Something3.zip
———————————————
.rar
解压:rar x Something.rar
压缩:rar a Something.rar DirName
———————————————
.lha
解压:lha -e Something.lha
压缩:lha -a Something.lha Something
———————————————
.rpm
解包:rpm2cpio Something.rpm | cpio -div
#———————————————
.deb
解包:ar p Something.deb data.tar.gz | tar zxf -
———————————————
.tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea
解压:sEx x Something.*
压缩:sEx a Something.* Something
.tar.xz (xz http://tukaani.org/xz/)
xz -d Something.tar.xz
# gzip 压缩比
-num 用指定的数字 num 调整压缩的速度,-1 或 --fast 表示最快压缩方法(低压缩比),-9 或--best表示最慢压缩方法(高压缩比)。系统缺省值为 6。
.7z
# download and install: https://sourceforge.net/projects/p7zip/files/p7zip/
tar xjvf p7zip_9.20.1_x86_linux_bin.tar.bz2
cd p7zip_9.20.1
sh install.sh
.7z
解压:
7za x file.7z -r -o./
(-o后是没有空格的,直接接目录)
压缩:
7za a -t7z -r out.7z /dir/*

python install packages

1
2
3
4
5
6
7
8
9
10
11
12
# set PYTHONPATH
export PYTHONPATH=/data/users/wlz/lib/python2.7/site-packages:/data/users/wlz:$PYTHONPATH
# pip
pip install --user pysnptools
pip install --user matplotlib==1.4.3 #指定版本号
# easy_install
easy_install -d /data/users/wlz/lib/python2.7/site-packages pysnptools
# download source code
python setup.py install --prefix=/data/users/wlz