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
Shell字符串截取处理文件路径的更多相关文章
- 从字符串总分离文件路径、命名、扩展名,Substring(),LastIndexOf()的使用;替换某一类字符串,Replace()的用法
一:从字符串总分离文件路径.命名.扩展名,上图 二:代码 using System; using System.Collections.Generic; using System.ComponentM ...
- 使用任意的输入流(InputStream)实例,包括字符串形式的文件路径或者 file:// 的 URL 形式的文件路径来配置
mybatis – MyBatis 3 | 入门 http://www.mybatis.org/mybatis-3/zh/getting-started.html 从 XML 中构建 SqlSessi ...
- Linux 的shell 字符串截取很有用。有八种方法。
一 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.linuxidc.com/123.htm 1 # 号截取,删除左边字符,保留右边字符. echo ${va ...
- Linux - Shell - 字符串截取
概述 简述 字符串 截取 背景 之前因为要给文件 批量重命名, 做过字符串截取 当时做好了, 也说了要写点东西 结果忘了 现在又要尝试批量 重命名 才发现之前的东西已经忘了好多 要是当时把博客写下来, ...
- Shell字符串截取
shell中截取字符串的方法有很多中, ${expression}一共有9种使用方法. ${parameter:-word} ${parameter:=word} ${parameter:?word} ...
- 【转】shell字符串截取
shell字符串的截取的问题: 一.Linux shell 截取字符变量的前8位,有方法如下: 1.expr substr “$a” 1 8 2.echo $a|awk ‘{print substr( ...
- Linux shell字符串截取与拼接
一 Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.linuxidc.com/123.htm 1 # 号截取,删除左边字符,保留右边字符. echo ${va ...
- shell 字符串截取
${expression}一共有9种使用方法. ${parameter:-word},如果parameter为空,则用word的值做parameter的缺省值 ${parameter:=word},在 ...
- WinFrom下连接字符串的数据库文件路径问题
一直以为连接字符串中的系统变量|DataDirectory|就是在ASP.NET中代替App_Data的绝对路径.原来在WinForm程序中也能用|DataDirectory|,不过指代的是exe文件 ...
随机推荐
- 0423 hashlib模块、logging模块、configparse模块、collections模块
一.hashlib模块补充 1,密文验证 import hashlib #引入模块 m =hashlib.md5() # 创建了一个md5算法的对象 m.update(b') print(m.hexd ...
- mysql 在windows server下发生系统错误 1067, 进程意外终止的解决方法
mysql 在windows server下发生系统错误 1067, 进程意外终止,请检查系统盘下的windows目录下是否存在mysql的配置文件my.ini,如存在,将其删除或改名即可.
- Java -- 乒乓球 乒乓弹球游戏
<疯狂Java讲义> 练习游戏 import java.awt.Canvas; import java.awt.Color; import java.awt.Dimension; impo ...
- 大话设计模式--命令模式 Command -- C++实现实例
1. 命令模式: 将请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作. 命令模式有点: a. 较容易的设计一个命令队列 b. 在需要的的情况 ...
- JAVA NIO之浅谈内存映射文件原理与DirectMemory
JAVA类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段.本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原 ...
- html基础学习(注意点)
浏览器会自动地在块级元素(<p><h1>)的前后添加空行 当显示页面时,浏览器会移除源代码中多余的空格和空行.所有连续的空格或空行都会被算作一个空格.需要注意的是,HTML 代 ...
- Vue2.0项目
什么是 Vue Vue 是一个前端框架,特点是 数据绑定 比如你改变一个输入框 Input 标签的值,会 自动同步 更新到页面上其他绑定该输入框的组件的值  组件化 页面上小到一个按钮都可以是一个单 ...
- jq js 的date()使用
Js获取当前日期时间及其它操作 var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年 ...
- codeforces 629D D. Babaei and Birthday Cake (线段树+dp)
D. Babaei and Birthday Cake time limit per test 2 seconds memory limit per test 256 megabytes input ...
- 利用bootsrap控件 实现文件上传功能
源代码实例:https://github.com/kartik-v/bootstrap-fileinput 一.jsp页面 <%@ page language="java" ...