从我的文件标题中删除变量模式

从我的文件标题中删除变量模式

当我终于收到 NGS 测序的数据时,我用 Ubuntu 花了几天时间进行分析。但是,我缺乏 shell 编码的基础知识,对这种全新的语言感到不知所措。

我设法遵循管道,但仍然存在初学者的问题。

具体来说,我有一个文件夹,里面有 96 个文件,我想重命名它们。它们通常具有以下形式:

AD18_S1_R2_cat_trimmed.fastq.gz
AD19_S26_R2_cat_trimmed.fastq.gz

基本上,我试图删除样本 ID,例如_S1_S26。我最近发现了星号,并成功地将它们用于以前的功能。但我无法想象如何在这里使用它们。我认为可行的方法是提取_S和之间的表达式_R并将其删除,同时保留R

如果样本 ID 的长度始终相同,我会[5-7]删除名称中的字符。但对于某些样本,这种方法行不通。

我想了解如何做到这一点,而不是得到答案。因此,如果您同意分享解决方案,您能否向我解释如何进行此更改,以及您的代码意味着什么?

答案1

mmv是一个很好的工具。默认情况下它没有安装,因此您可以使用以下命令安装它:

sudo apt install mmv

然后只需在保存文件的目录中运行以下命令:

mmv -n '*_*_R2_cat_trimmed.fastq.gz' '#1_R2_cat_trimmed.fastq.gz'

简化的解释:

  • -n使用 (no-execute) 是为了预览更改,但不应用这些更改。如果您对输出满意,请在不使用标志的情况下重新运行该命令-n

  • 您想要删除第一个和第二个之间的所有内容,因此( )_的第一个参数是文件的一般表达式。mmv'*_*_R2_cat_trimmed.fastq.gz'

    星号是通配符,表示“匹配任意字符串”。因此,我们匹配第一个 之前的任何字符串_,然后匹配第一个 和第二个 之间的任何字符串_,其余文件名保持不变。

  • 第二个参数 ( '#1_R2_cat_trimmed.fastq.gz') 基本上表示“使用第一个匹配项重命名”( #1),其余部分只是我们保留的字符串部分。由于我们没有使用第二个匹配项 ( #2),因此我们有效地将其删除。

默认情况下,mmv在后台应用更改。如果您想在进行更改时查看更改,可以使用-v(verbose) 标志。

有关更多信息mmv,您可以通过运行来查阅其手册页man mmv在你的终端。

笔记:在运行任何命令之前,请务必在部分文件中对其进行测试,以确保其能够按预期工作并且不会丢失任何文件。始终备份原始文件也是个好主意。

答案2

使用rename

rename -n 's/^([^_]*)_S[^_]*(_.*)$/$1$2/' *.fastq.gz

-n如果您对输出满意,请删除。

perlrename工具使用类似于以下的 perl 正则表达式sed

  • s/pattern/replacement/modifier将搜索模式并用替代品代替它。
  • pattern是一个用于匹配字符串的正则表达式。
  • ^([^_]*)_=> 从文件名开头 ( ^) 搜索直到第一个_( [^_]*) 的任何内容并将其保存为变量(...)以用于替换 ( $1)。
  • S[^_]*=> 匹配S之后跟有 的任何非 的东西_
  • (_.*)$匹配一个_后跟任意内容 ( .*)(再次将一个保存为变量$2)直到字符串结尾 ( $)。

答案3

一般来说,使用正则表达式时,“少即是多”。我的意思是,避免尝试匹配整个字符串,而是专注于匹配您感兴趣的部分。在这种情况下,字母后跟一个或多个数字。这可以用 Perl 兼容正则表达式 (PCRE) 语法(该工具S使用的语法)表示为。renameS\d+

考虑到这一点,这里有一个更简单的rename命令:

$ rename -n 's/_S\d+//' *fastq.gz
AD18_S1_R2_cat_trimmed.fastq.gz -> AD18_R2_cat_trimmed.fastq.gz
AD19_S26_R2_cat_trimmed.fastq.gz -> AD19_R2_cat_trimmed.fastq.gz

该命令将用空字符替换第一个 a_后跟S一个或多个数字 ( \d+),从而有效地将其删除。 指示-n不要rename重命名任何内容,而只是打印它将执行的操作。一旦您确认此命令可以满足您的要求,请删除-n以使命令真正重命名文件。

相关内容