今天将生信工作中的一些常用命令记录(分享)如下:
(以后会不定期更新)
转换dos/windows格式的bed文件为unix格式
(说明:我们拿到的bed文件时常是客户在Windows系统下编辑好的,其行尾是\r\n,在进行NGS分析前最好将其转换为Unix风格的行尾\n。)
dos2unix –n dos.bed.txtunix.bed.txt
可以看出上面的dos.bed.txt是一个dos风格(^M$,即\r\n结尾)的文件。要想转换成unix格式($,即\n结尾)的文件,当然可以用dos2unix命令来完成:
可以看到转换成功。问题在于dos2unix命令往往不是系统默认安装的,你要自行安装后才可以使用。一个替代的方法是用sed命令。
sed ‘s/\r//’dos.bed.txt > unix.bed.txt
可以看到,转换效果是一样的。
批量删除一个目录及其子目录下的bam文件
find your_path –name *.bam –execrm {} \;
合并两个fastq文件
cat fastq1 fastq2 >merged_fastq
获取fastq文件名前缀
(假设fastq文件名是test.r1.fq.gz,我们想得到其前缀test)
your_string| cut –d. –f1
或者:
your_string |sed ‘s/\..*//’
或者:
your_string |awk –F. ‘{print $1}’
或者(如果是在脚本中实现这一功能的话):
利用shell中的字符串变量删除功能${var%%}来实现。
打包并压缩项目文件
tar zcvf tar_file origin_files
打印行号
sed ‘=’ your_file | sed‘N;s/\n/\t/’
或者:
awk ‘{printf(“%d\t%s\n”, NR, $0)}’ your_file
输出指定的行数
(比如第666行)
sed –n ‘666p;666d’ your_file
或者:
awk‘NR==666{print $0; exit}’ your_file
统计不重复的基因个数
(假设基因名在第一列)
awk ‘{print $1}’ your_file | sort-u | wc –l
或者
awk ‘{a[$1]++}END {print length(a)}’ your_file
找出表达量最高的基因
(假设基因名在第一列,表达量数据在第四列)
sort –k4,4nryour_file | head -1 | cut –f1
或者(如果仅仅是找出最高表达量的基因,下面的方法更快!因为它不对所有记录排序):
awk‘{if(max<$4){max=$4;gene=$1}} END {print gene}’ your_file
打印最后一列
awk ‘{print $NF}’ your_file
反向互补序列
(如”agctn”的反向互补序列应该是”nagct”)
your_string | tr‘agctnAGCTN’ ‘tcganTCGAN’ | rev
your_string | sed‘y/agctnAGCTN/tcganTCGAN/’ | rev
求取某一列平均值
(假设求第四列的平均值)
awk ‘{x+=$4} END {print x/NR}’your_file
如果是压缩文件,则需利用zcat来生成“流”:
zcatyour_zipped_file | awk ‘{x+=$4} END {print x/NR}’
获取脚本文件所在目录的绝对路径
(假设你有一个脚本test.sh,你想在该脚本里写几行代码获取test.sh所在目录的绝对路径)
abs_path=$(cd“$(dirname “$0”)”; pwd)
echo$abs_path
对bed文件排序
(假设依次按照前三列进行排序)
sort –k1,1V–k2,2n –k3,3n unsort.bed > sort.bed
最后提一句:从上面的诸多例子中,我们可以看出,sed与awk的威力。它们与grep并称Linux下的“三剑客”,牛叉哄哄!