【Bash】用 for-loop 完成拷贝批量文件名称到文字档 (txt) 里

大家好,我是一个喜欢研究算法、机械学习和生物计算的小青年,我的CSDN博客是:一骑代码走天涯
如果您喜欢我的笔记,那么请点一下关注、点赞和收藏。如果內容有錯或者有改进的空间,也可以在评论让我知道。😄

在生物计算工作上,有时候为了节省时间,便会在Linux 用Bash批量处理文件。比如说现在有个文件夾路径,包含以下这些FASTQ基因测序文件:

$ ls /home/storage/QC_illumina/result/*.fastq
/home/storage/QC_illumina/result/sample_96-QUALITY_PASSED_R1.fastq
/home/storage/QC_illumina/result/sample_96-QUALITY_PASSED_R2.fastq
/home/storage/QC_illumina/result/sample_97-QUALITY_PASSED_R1.fastq
/home/storage/QC_illumina/result/sample_97-QUALITY_PASSED_R2.fastq
/home/storage/QC_illumina/result/sample_98-QUALITY_PASSED_R1.fastq
/home/storage/QC_illumina/result/sample_98-QUALITY_PASSED_R2.fastq
/home/storage/QC_illumina/result/sample_99-QUALITY_PASSED_R1.fastq
/home/storage/QC_illumina/result/sample_99-QUALITY_PASSED_R2.fastq
......

可以看见,以上所有样本都是成对存在的 (R1R2分別记録基因各一端的测序)。假设我们需要把每对样品的FASTQ文件路径都写进不同的的txt文件,例如这样:

$ more sample_1.txt
/home/storage/QC_illumina/result/sample_1-QUALITY_PASSED_R1.fastq
/home/storage/QC_illumina/result/sample_1-QUALITY_PASSED_R2.fastq

那可以用以下Bash 代码来进行自动填写,利用迴圈多快好省地节约时间。
其中,$(basename $file) 是用來返回路径中的文件名部分;相反, $(dirname $file) 则用来返回路径中的目录部分

$ A=/home/storage/test.txt
$ echo $(basename $A)
test.txt
$ echo $(dirname $A)
/home/storage

cut的用法,可以参考我在这篇文章写的详細介绍。

好了,那下面就看我所用的代码吧 (写的有点粗糙,请多指点)。

代码

for file in /home/storage/QC_illumina/result/*.fastq;
do
        BNAME=$(basename $file);
        NAME=$(cut -d '-' -f 1 <<< "$BNAME");
        if [[ $BNAME == *"R2.fastq" ]]; then
                ls "$(dirname $file)"/"$NAME"-*.fastq>> "$NAME".txt;
        fi;
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值