使用linux命令在子目录中的cat文件

时间:2014-09-12 14:33:08

标签: linux cat

我有以下目录:

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解决方案吗?

2 个答案:

答案 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.gzcat匹配的所有文件到所需文件中。 -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