12.《Bioinformatics Data Skills》之命令替换

命令替换(Command Substitution)指的是将一个行内表达式的运行结果作为另外一个程序的输入。以此增加脚本的自动化程度,并减少人工错误。举例说明:

例1:统计FASTA序列数目

文件内容:

head example.fasta

>seq0
FQTWEEFSRAAEKLYLADPMKVRVVLKYRHVDGNLCIKVTDDLVCLVYRTDQAQDVKKIEKF
>seq1
KYRTWEEFTRAAEKLYQADPMKVRVVLKYRHCDGNLCIKVTDDVVCLLYRTDQAQDVKKIEKFHSQLMRLME LKVTDNKECLKFKTDQAQEAKKMEKLNNIFFTLM
>seq2
EEYQTWEEFARAAEKLYLTDPMKVRVVLKYRHCDGNLCMKVTDDAVCLQYKTDQAQDVKKVEKLHGK
>seq3
MYQVWEEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVCLQYKTDQAQDVK
>seq4
EEFSRAVEKLYLTDPMKVRVVLKYRHCDGNLCIKVTDNSVVSYEMRLFGVQKDNFALEHSLL                                                                                                                                                        
grep -c "^>" example.fasta
# 11
echo "例子fasta文件里面一共有$(grep -c "^>" example.fasta)"条序列。
# 例子fasta文件里面一共有11条序列。

解释:

  1. fasta里面以">"开头代表一条连续的序列,
  2. grep-c参数代表返回匹配结果的行数
  3. 使用$()可以将表达式的运算结果嵌到字符串里面

例2:使用日期作为文件后缀

假设我们因为某种原因需要重新跑结果,但是又不想覆盖前一次的结果。除了对结果进行备份外,在结果后面加上日期也是一个好的选择。人工去加日期的话比较麻烦也可能犯错(尤其是刚过完年的时候),我们可以采用代码date +%F生成日期,嵌在创建结果文件夹的命令中:

date +%F
# 2021-05-31
mkdir result-$(date +%F)
ls
# result-2021-05-31

解释:

  1. date参数+%F可以生成yyyy-mm-dd格式日期,这种格式歧义最小并且可以显示的时候会按照真实时间排序,推荐使用。
$ ls -l
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:23 1999-07-01
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:22 2000-12-19
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:22 2011-02-03
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:22 2012-02-13
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:23 2012-05-26
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:22 2012-05-27
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:23 2012-07-04
drwxr-xr-x 2 vinceb staff 68 Feb 3 23:23 2012-07-05

PS:

可以将alias today="date +%F"放到~/.bashrc配置文件中,方便于简单快速地调用:

today
# 2021-05-31

不过值得注意的是,不要在工程里面使用alias,会降低工程的可移植性。

你可能感兴趣的:(12.《Bioinformatics Data Skills》之命令替换)