【发布时间】:2015-12-11 09:49:51
【问题描述】:
我有几个文件,如下所示:
1_150901_AC7GLHANXX_P2258_101_1.fastq.gz
1_150901_AC7GLHANXX_P2258_101_2.fastq.gz
2_150901_AC7GLHANXX_P2258_101_1.fastq.gz
2_150901_AC7GLHANXX_P2258_101_2.fastq.gz
...即,有两个以1_ 开头并以_1.fastq.gz 或_2.fastq.gz 结尾的文件,对于以2_ 开头的两个文件也是如此。我要做的是cat这两个以_1.fastq.gz结尾的文件,像这样:
cat 1_150901_AC7GLHANXX_P2258_101_1.fastq.gz \
2_150901_AC7GLHANXX_P2258_101_1.fastq.gz \
> 150901_AC7GLHANXX_P2258_101_1.fastq.gz
... 以便将它们合并并删除它们的前缀。我在比这更多的文件夹中有更多的文件,所以我想自动化它。我尝试了以下代码,但无济于事:
for f in *_*_1.fastq.gz
do
cat $f "${f/^1_/2_}" > "${f/^1_/}"
done
我认为我不太了解这种替换方法,但它是我过去用于不太复杂的文件名的方法(当它们只有不同的后缀,没有前缀时)。我认为开头的^ 表示文件名的开始,但它似乎不像我想要的那样工作,所以很明显我做错了什么。我尝试进行一些故障排除:
for f in *_*_1.fastq.gz
do
echo "${f/^1_/}"
done
...给我...
1_150901_AC7GLHANXX_P2258_101_1.fastq.gz
2_150901_AC7GLHANXX_P2258_101_1.fastq.gz
...这不是我想的那样。有人知道我该怎么做吗?
[编辑,澄清非重复问题]
这个问题与我之前的问题不同,我还有一个文件名前缀,而且这个前缀也存在于文件名的中间。另一个问题有一个更简单的情况,只有一个后缀是需要重命名的。
【问题讨论】:
-
在此上下文中,字符串锚点的开头是
#字符,而不是^。请参阅relevant section of the manual(您必须滚动到涵盖${parameter/pattern/string}扩展部分的相关部分)。 -
啊,好吧!是的,
#在这种情况下确实有效,谢谢!