我有以下文件列表;
11F.fastq.gz
11R.fastq.gz
12F.fastq.gz
12R.fastq.gz
我想将这些文件名重命名为以下内容;
11_S11_L001_R1_001.fastq.gz
11_S11_L001_R2_001.fastq.gz
12_S12_L001_R1_001.fastq.gz
12_S12_L001_R2_001.fastq.gz
我尝试reanme
如下
rename 's/F.fastq/_S_L001_R1_001.fastq/' *.gz
rename 's/R.fastq/_S_L001_R2_001.fastq./' *.gz
但我不太知道如何在“S”后面添加文件编号(在本例中为 11 和 12)。任何指示将不胜感激。
答案1
zsh
有自己的内置批量重命名工具:zmv
可作为自动加载功能使用。
autoload -Uz zmv
typeset -A map=(F 1 R 2)
zmv -n '(<->)([FR])(.fastq.gz)' '${1}_S${1}_L001_R$map[$2]_001$3'
(-n
如果满意,请删除(空运行))。
或者使用标量map=FR
并使用该字符串中字母的索引进行替换:
map=FR
zmv -n "(<->)([$map])(.fastq.gz)" '${1}_S${1}_L001_R$map[(Ie)$2]_001$3'
答案2
和珀尔的rename
命令行,您可以捕获变量部分 ( (...)
) 并使用反向引用 ( $1
):
rename -n 's/(\d+)F\.fastq/$1_S$1_L001_R1_001.fastq/' *F.fastq.gz
rename -n 's/(\d+)R\.fastq/$1_S$1_L001_R2_001.fastq/' *R.fastq.gz
-n
如果您对输出满意,请删除。