我有以下目录:
P922_101
P922_102
.
.
每个目录,例如P922_101都有以下子目录:
140311_AH8MHGADXX 140401_AH8CU4ADXX
每个子目录,例如140311_AH8MHGADXX都有以下文件:
1_140311_AH8MH_P922_101_1.fastq.gz 1_140311_AH8MH_P922_101_2.fastq.gz
2_140311_AH8MH_P922_101_1.fastq.gz 2_140311_AH8MH_P922_101_2.fastq.gz
140401_AH8CU4ADXX中的文件是:
1_140401_AH8CU_P922_101_1.fastq.gz 1_140401_AH8CU_P922_4001_2.fastq.gz
2_140401_AH8CU_P922_101_1.fastq.gz 2_140401_AH8CU_P922_4001_2.fastq.gz
我希望以下列方式为子目录中的文件执行'cat':
cat 1_140311_AH8MH_P922_101_1.fastq.gz 2_140311_AH8MH_P922_101_1.fastq.gz
1_140401_AH8CU_P922_101_1.fastq.gz 2_140401_AH8CU_P922_101_1.fastq.gz > P922_101_1.fastq.gz
这意味着以_1.fastq.gz结尾的文件应该连接成一个文件,而以_2.fatsq.gz结尾的文件应该连接到另一个文件中。
应该对所有目录中子目录中的所有文件运行它。有人可以提供一个Linux解决方案吗?
答案 0 :(得分:0)
您可以使用find
:
find /top/path -mindepth 2 -type f -name "*_1.fastq.gz" -exec cat {} \; > one_file
find /top/path -mindepth 2 -type f -name "*_2.fastq.gz" -exec cat {} \; > another_file
这将查找从/top/path
开始并且名称与模式_1.fastq.gz
/ _2.fastq.gz
和cat
匹配的所有文件到所需文件中。 -mindepth 2
使find
查找至少在当前目录下的文件;这样,/top/path
中的文件将不会匹配。
请注意,对于zcat
个文件,您可能需要cat
而不是gz
。
在评论中不断添加详细信息时,让我们看看我们还能做些什么:
假设您有文件directories_list
中的目录列表,每行包含一个:
while read directory
do
find $directory -mindepth 2 -type f -name "*_1.fastq.gz" -exec cat {} \; > $directory/output
done < directories_list
答案 1 :(得分:0)
由于它们是压缩的,你应该使用gzip -dc
(解压缩并写入stdout) -
find /somePath -type f -name "*.fastq.gz" -exec gzip -dc {} \; | \
tee -a /someOutFolder/out.txt