如何使用文件名创建新目录并将相关文件移动到该新目录中



第一篇文章,很高兴能成为这个社区的一员。

我是一个初学者,主要使用命令行进行下一代测序(NGS(分析。

我有一个文件列表,其中包含来自测序仪的数据,如下所示:

[agh8423@quser12 all_fastq]$ ls Bio5* -al
-rw-r--r-- 1 agh8423 p30592 253029870 Jul 19 11:10 Bio5-H3K27ac-Dox-no_S5_L001_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 248177942 Jul 19 11:11 Bio5-H3K27ac-Dox-no_S5_L002_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 256860841 Jul 19 11:11 Bio5-H3K27ac-Dox-no_S5_L003_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 253399957 Jul 19 11:12 Bio5-H3K27ac-Dox-no_S5_L004_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 246636194 Jul 19 11:12 Bio5-H3K27ac-Dox-yes_S6_L001_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 242114964 Jul 19 11:13 Bio5-H3K27ac-Dox-yes_S6_L002_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 249862612 Jul 19 11:13 Bio5-H3K27ac-Dox-yes_S6_L003_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 247798281 Jul 19 11:14 Bio5-H3K27ac-Dox-yes_S6_L004_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 234917538 Jul 19 11:14 Bio5-H3K4me3-Dox-no_S3_L001_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 230571628 Jul 19 11:14 Bio5-H3K4me3-Dox-no_S3_L002_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 233025109 Jul 19 11:15 Bio5-H3K4me3-Dox-no_S3_L003_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 230268463 Jul 19 11:15 Bio5-H3K4me3-Dox-no_S3_L004_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 246254343 Jul 19 11:15 Bio5-H3K4me3-Dox-yes_S4_L001_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 241866406 Jul 19 11:16 Bio5-H3K4me3-Dox-yes_S4_L002_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 247044518 Jul 19 11:16 Bio5-H3K4me3-Dox-yes_S4_L003_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 243759599 Jul 19 11:17 Bio5-H3K4me3-Dox-yes_S4_L004_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 251009676 Jul 19 11:17 Bio5-Input-Dox-no_S1_L001_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 246054510 Jul 19 11:18 Bio5-Input-Dox-no_S1_L002_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 255798685 Jul 19 11:18 Bio5-Input-Dox-no_S1_L003_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 253896496 Jul 19 11:19 Bio5-Input-Dox-no_S1_L004_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 232179873 Jul 19 11:19 Bio5-Input-Dox-yes_S2_L001_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 227146014 Jul 19 11:19 Bio5-Input-Dox-yes_S2_L002_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 236543332 Jul 19 11:20 Bio5-Input-Dox-yes_S2_L003_R1_001.fastq.gz
-rw-r--r-- 1 agh8423 p30592 234698786 Jul 19 11:20 Bio5-Input-Dox-yes_S2_L004_R1_001.fastq.gz

如果您注意到,有些文件名几乎相同,只是文件名的"L001/2/3/4"部分不同。这些基本上是复制样本,对于下游流程,我想连接这些文件(但这些信息可能与我的问题无关(

我想要的是:创建一个父目录,目录名为"_S(*(_L00(1/2/3/4(_Ri_001.fastq.gz"左侧的所有内容(例如,第一个文件将有一个名为"Bio5-H3K27ac-Dox-no"的目录(。除了创建这个目录外,我还想将所有带有上述文件前缀的文件(即所有前缀名称为Bio5-H3K27ac-Dox-no的L001/2/3/4(放入新目录。计划是运行zcat并将文件连接到一个更易于分析的文件中。

以下是我的尝试:

for file in ./*_L001_R1_001.fastq.gz.txt; do
dir=${file%_L001_R1_001.fastq.gz.txt}
mkdir -p "./$dir" &&
mv -iv "$file" "./$dir"
mv -iv "$dir"_L00* "./$dir"
done

如果我是我的目录,我会得到以下内容。

[agh8423@quser11 test]$ ls -al
total 36
drwxrwsr-x 8 agh8423 p30592  4096 Jul 22 18:27 .
drwxrwsr-x 3 agh8423 p30592 32768 Jul 22 17:27 ..
drwxrwsr-x 2 agh8423 p30592  4096 Jul 22 18:27 Bio1-Input-Dox-no_S12
drwxrwsr-x 2 agh8423 p30592  4096 Jul 22 18:27 Bio1-Input-Dox-yes_S11
drwxrwsr-x 2 agh8423 p30592  4096 Jul 22 18:27 Bio1-MYC-Dox-no_S2
drwxrwsr-x 2 agh8423 p30592  4096 Jul 22 18:27 Bio1-MYC-Dox-yes_S3
drwxrwsr-x 2 agh8423 p30592  4096 Jul 22 18:27 Bio1-WDR5-Dox-no_S5
drwxrwsr-x 2 agh8423 p30592  4096 Jul 22 18:27 Bio1-WDR5-Dox-yes_S10
-rwxrwxr-x 1 agh8423 p30592   178 Jul 22 18:29 test1.sh

我不想要的部分是目录名末尾的_S12等,但我希望它保留在移动到新目录的文件名中。

-奥斯汀

获取您的提案并完善它:

for file in ./*_L001_R1_001.fastq.gz.txt; do
# $file will contain a relative folder and filename:
# ./Bio5-H3K27ac-Dox-no_S5_L001_R1_001.fastq.gz
# We are going to extract the filename and alter it to keep
# the interesting part
dir=$(basename "$file" | cut -f1 -d_)
# Now, create the folder in the current workind directory
mkdir -p "$dir"
# Finally, move all the files that start with that
# prefix to the new folder
mv -iv "${dir}"* "$dir"
done

最后一个move命令将抛出一个错误,因为它将尝试将$dir移动到$dir,这是不可能的。但其他文件将被移动,工作将完成。如果你想要更干净的执行,你必须选择你想移动的文件(并排除你不想移动的文件夹(:

find . -maxdepth 1 -type f -name "${dir}*" | xargs -n 1 -I{} mv {} "$dir"

相关内容

最新更新