Linux系统在生物信息学数据处理中的重要性就不用我多说了,学会准确使用相对应的coomadns,往往可以节省很多你的时间,废话不多说,今天给大家带来一系列实用的Linux commands。
(本节内容,建立在你有一定linux的基础上)
Xargs
Xargs 可能是我见过最强大的commands,可是很多人确忽略了他强大之处。
1.删除目前所在目录下所有以txt为后缀的文件
find . -name "*.txt" | xargs rm
2.打包目前所在目录下所有pl后缀文件
find . -name "*.pl" | xargs tar -zcf pl.tar.gz
3.杀死所有something匹配到的进程
ps -u `whoami` | awk '/something/{print $1}' | xargs kill
4.将所有txt重命名为bak
find . -name "*.txt" | sed "s/\.txt$//" | xargs -i echo mv {}.txt {}.bak | sh
5.重复运行某程序N次(以 bootstraing 为例)
perl -e 'print "$_\n"for(1..100)' | xargs -i bsub echo bsub -o {}.out -e {}.err some_cmd | sh
6.按行提交一个脚本中的所有命令(每行一个命令)
cat my_cmds.sh | xargs -i echo bsub {} | sh
Find
在一个目录中查找满足指定条件的所有文件. 你可以写出更复杂的命令, 不过我觉得以下的例子会更有用(常用):
1.找到所有以txt为后缀的文件(包括子目录)
find . -name "*.txt"
2.查找所有目录
find . -type d
Cut
Cut 命令用来切割指定的列, 默认的分隔符是一个单TAB
1.切割1, 2, 3, 5, 7以及后面的列
cut -f 1-3,5,7- input.txt
2.切割得到第三列, 指定定界符为一个空格single SPACE
cut -d" " -f 3 input.txt
Sort
几乎所有的脚本语言都有内置的 Sort 函数, 但是都没有像 Sort 命令一样灵活. 此外, GNU sort 命令空间利用率也是非常高效. 我曾用不到 2GB 的内存排序一个 20GB 的文件. 如此强大的 sort 你自己实现的话会很难.
1.对以空格为定界符的文件排序, 如果第一列相同, 则比第二列, 第二列相同, 则比第三列, 以此类推
sort input.txt
2.对一个超大文件进行排序(只适用于GNU Sort)
sort -S 1500M -t $/HOME/tmp input.txt > sorted.txt
3.跳过前两列从第三列开始排序
sort +2 input.txt
4.对第二列按数字降序排列, 如果相同, 则对第三列按字符升序排列
sort -k2,2nr -k3,3 input.txt
以第二列的第四个字符按数字排序, 默认升序
sort -k2,4n input.txt
Awk
Awk 是一个专门用来快速处理空格相隔数据的编程语言. 尽管它的所有功能你都可以用 Perl 实现, 但在很多实际应用场合 awk 会更简单. 你可以找到很多关于 awk 的在线指南. 这里我只列出一些我自己常用的例子.
筛选出所有第三列大于第五列的行
awk '$3 > $5' input.txt > output.txt
筛选出2, 4, 5列内容
awk '{print $2,$4,$5}' input.txt > output.txt
awk 'BEGIN{OFS="\t"}{print $2,$4,$5}' input.txt
显示第 20 到 80 行之间的内容
awk