zoukankan      html  css  js  c++  java
  • Shell字符串截取处理文件路径

      在生信处理流程中,从最初的fastq文件,经过分析处理后,会生成一堆的后续文件,如何在流程中合理的命名呢?

      通常在批处理模式中,我们会得到多个样本*.fastq(或*.fq、*.fastq.gz、*.fq.gz)路径名文件sample.txt。如下所示:

    /home/yhwang/sample/sampe01_R1.trimmed.fastq.gz    /home/yhwang/sample/sample01_R2.trimmed.fastq.gz
    /home/yhwang/sample/sampe02_R1.trimmed.fastq.gz    /home/yhwang/sample/sample02_R2.trimmed.fastq.gz
    /home/yhwang/sample/sampe03_R1.trimmed.fastq.gz    /home/yhwang/sample/sample03_R2.trimmed.fastq.gz
    /home/yhwang/sample/sampe04_R1.trimmed.fastq.gz    /home/yhwang/sample/sample04_R2.trimmed.fastq.gz
    /home/yhwang/sample/sampe05_R1.trimmed.fastq.gz    /home/yhwang/sample/sample05_R2.trimmed.fastq.gz
    /home/yhwang/sample/sampe06_R1.trimmed.fastq.gz    /home/yhwang/sample/sample06_R2.trimmed.fastq.gz
    /home/yhwang/sample/sampe07_R1.trimmed.fastq.gz    /home/yhwang/sample/sample07_R2.trimmed.fastq.gz
    /home/yhwang/sample/sampe08_R1.trimmed.fastq.gz    /home/yhwang/sample/sample08_R2.trimmed.fastq.gz
    ...
    /home/yhwang/sample/sampen_R1.trimmed.fastq.gz /home/yhwang/sample/samplen_R2.trimmed.fastq.gz

      上述,是一个多个双端*.fastq全路径文件sample.txt的内容,我们只需写好一个样本的分析流程,然后嵌套while循环,就可以实现批处理了。如何提取每行中的sample名称呢?shell中提供了多种字符串截取的功能,如下所示:

    # 对于每一行
    [yhwang@yhwang ~]$ line='/home/yhwang/sample/sampe01_R1.trimmed.fastq.gz /home/yhwang/sample/sample01_R2.trimmed.fastq.gz'

    # 获取sample名称
    [yhwang@yhwang ~]$ sample=`basename ${line%%_*}`
    [yhwang@yhwang ~]$ echo $sample
    sample0

    按指定的字符串截取 

    (1)第一种方法:

    从左向右截取最后一个string后的字符串
    ${varible##*string}
    从左向右截取第一个string后的字符串
    ${varible#*string}
    从右向左截取最后一个string后的字符串
    ${varible%%string*}
    从右向左截取第一个string后的字符串
    ${varible%string*}
    “*”只是一个通配符可以不要

    [yhwang@yhwang ~]$ variable="IP:180.97.33.107,port:80"
    [yhwang@yhwang ~]$ echo "1:"${variable##*.}
    1:107,port:80
    [yhwang@yhwang ~]$ echo "2:"${variable#*.}
    2:97.33.107,port:80
    [yhwang@yhwang ~]$ echo "3:"${variable%%.*}
    3:IP:180
    [yhwang@yhwang ~]$ echo "4:"${variable%.*}
    4:IP:180.97.3

    (2)第二种方法:

    ${varible:n1:n2}:截取变量varible从n1开始的n2个字符,组成一个子字符串。可以根据特定字符偏移和长度,使用另一种形式的变量扩展,来选择特定子字符串。

    [yhwang@yhwang ~]$ echo "5:"${variable:3:13}
    5:180.97.33.107

    参考资料

    https://blog.csdn.net/longshenlmj/article/details/14123643

  • 相关阅读:
    HttpMessageNotWritableException: Could not write JSON: No serializer found for class ****
    处理【Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operatio】
    java 日历类Calendar用法
    linux配置nginx
    linux 重命名文件和文件夹
    CentOS 6.7 配置 yum 安装 Nginx
    maven打包时跳过单元测试
    Eclipse 保存文件时自动格式化代码
    mybatis大于号,小于号,去地址符,单引号,双引号转义说明
    玩转Eclipse — 自动代码生成的Java Code Template
  • 原文地址:https://www.cnblogs.com/yahengwang/p/9664199.html
Copyright © 2011-2022 走看看