- 25.《Bioinformatics-Data-Skills》之
- 25.《Bioinformatics-Data-Skills》之
- 28.《Bioinformatics-Data-Skills》之
- 18.《Bioinformatics-Data-Skills》之
- 19.《Bioinformatics-Data-Skills》之
- 17.《Bioinformatics-Data-Skills》之
- 23.《Bioinformatics-Data-Skills》之
- 24.《Bioinformatics-Data-Skills》之
- 21.《Bioinformatics-Data-Skills》之
- 20.《Bioinformatics-Data-Skills》之
《Bioinformatics-Data-Skills》之管道
Unix的一大哲学思想就是模块性。我们不仅需要学习一个工具如何使用,还需要学习如何将工具组装起来解决更复杂的问题。通过管道符号我们可以提高代码的可读性与模块化,这里通过一个例子来说明:
例如我们想要统计一个文本文件里面所有单词的出现次数前10的单词与出现次数,可以采用下面的代码:
cat README.md | tr -cs A-Za-z '\n' | tr A-Z a-z | sort | uniq -c | sort -rn | sed 10q
结果为:
11 fastq
10 data
8 seqs
8 r
5 the
5 sequencing
5 sequences
5 quality
4 of
3 we
代码解析:
1. cat README.md |
2. tr -cs A-Za-z '\n' |
3. tr A-Z a-z |
4. sort |
5. uniq -c |
6. sort -rn |
7. sed 10q
每行的意思为:
- 将
README.md
内容作为输入 -
tr
是翻译程序,-c
参数代表取第一个输入(A-Za-z
)的补集,即非字母的字符;-s
表示合并相邻的字符。这行的意思是将(相邻的多个)非字母的字符转换为换行符,这样我们就得到了每个单词为一行的结果; - 将大写字母转换为小写字母;
- 将每行按字母顺序排序,这样同样的单词是想念出现的;
- 去除重复出现的单词,通过
-c
参数统计每个单词的出现次数; - 按数字(
-n
)逆向(-r
)排序; - 打印前10行信息并退出。
可以看出每个操作都是符合我们正常的逻辑思维顺序的,这样的操作无疑更方便可读与模块化,也会减少Bug的出现。
使用上述的命令更加快捷,但是使用更完善的脚本文件有更好的记录性。不过无论采用什么方式最重要的是将你的操作记录下来,方便以后的检查与重新运行。
网友评论