Trích xuất các tệp tar.gz vào một thư mục có tên cơ sở khác nhau dựa trên kết quả khớp của chúng trong tệp văn bản


0

Tôi có hàng trăm thư mục, một số có tệp tar.gz và một số có tệp bam. Tôi chỉ muốn trích xuất các tập tin tar.gz vào một thư mục khác. Các thư mục với tệp tar.gz trông như được đề cập dưới đây:

d1017f74-3a39-4427-af57-273e34247b49
           ├──--- UNCID_2207021.7b9569bc-f513-4b64-9a7c-7bb53b9be79b.110801_UNC12-SN629_0115_BD0DVEABXX_3_ACAGTG.tar.gz
5e2d5c52-596f-49bc-967c-42129abbacbf
           ├──--- UNCID_2208720.71b58051-3bf8-4dfb-a431-c8aceab7c799.110608_UNC13-SN749_0073_BD0CV8ABXX_2.tar.gz
2ef74f93-5da2-454c-aca2-d86c289eacb8
           ├──--- UNCID_2206802.25be50e7-7705-492d-a44a-0e40180d10c8.110901_UNC12-SN629_0127_BC025UABXX_1_CTTGTA.tar.gz
e01ca3e0-beb0-46b7-bb7c-f5b16f966918
           ├──--- UNCID_2521679.d817dcee-1322-4949-a6e9-138447e6fc56.140417_UNC13-SN749_0343_BC41HBACXX_5_CTTGTA.tar.gz
992a7083-28ce-4857-898e-9d4b4fbf2fa1
           ├──--- UNCID_2319278.bf92b8cc-9a5c-4e96-917c-c264fe588f8d.131118_UNC12-SN629_0336_AC31D0ACXX_5_ACTTGA.tar.gz

Để trích xuất các tập tin tar.gz vào một thư mục đích tôi đã sử dụng lệnh sau:

find /path/to/directory -name '*.tar.gz' -execdir tar -C /path/to/targetdirectory -xzvf '{}' \;

Lệnh này cung cấp các tệp fastq đầu ra cho một số tệp tar.gz có tên như dưới đây:

110801_UNC12-SN629_0115_BD0DVEABXX.3_1.fastq
110801_UNC12-SN629_0115_BD0DVEABXX.3_2.fastq

110608_UNC13-SN749_0073_BD0CV8ABXX.2_1.fastq
110608_UNC13-SN749_0073_BD0CV8ABXX.2_2.fastq

110901_UNC12-SN629_0127_BC025UABXX.1_1.fastq
110901_UNC12-SN629_0127_BC025UABXX.1_2.fastq

Đây không phải là điều tôi muốn. Có một tệp văn bản với Tên thư mục, tên tệp tar.gz, tên mẫu như sau:

FolderNames                                         Tar.gz files                                                                                 SampleNames
d1017f74-3a39-4427-af57-273e34247b49    UNCID_2207021.7b9569bc-f513-4b64-9a7c-7bb53b9be79b.110801_UNC12-SN629_0115_BD0DVEABXX_3_ACAGTG.tar.gz   S-E9-A1NA-11A
5e2d5c52-596f-49bc-967c-42129abbacbf    UNCID_2208720.71b58051-3bf8-4dfb-a431-c8aceab7c799.110608_UNC13-SN749_0073_BD0CV8ABXX_2.tar.gz    S-AO-A12H-01A
2ef74f93-5da2-454c-aca2-d86c289eacb8    UNCID_2206802.25be50e7-7705-492d-a44a-0e40180d10c8.110901_UNC12-SN629_0127_BC025UABXX_1_CTTGTA.tar.gz   S-AC-A23E-01A
e01ca3e0-beb0-46b7-bb7c-f5b16f966918    UNCID_2521679.d817dcee-1322-4949-a6e9-138447e6fc56.140417_UNC13-SN749_0343_BC41HBACXX_5_CTTGTA.tar.gz   S-C8-A8HR-01A
992a7083-28ce-4857-898e-9d4b4fbf2fa1    UNCID_2319278.bf92b8cc-9a5c-4e96-917c-c264fe588f8d.131118_UNC12-SN629_0336_AC31D0ACXX_5_ACTTGA.tar.gz   S-A8-A08A-01A

Đầu ra sẽ lấy tên mẫu từ tệp văn bản và sẽ trông như dưới đây:

S-E9-A1NA-11A.3_1.fastq
S-E9-A1NA-11A.3_2.fastq

S-AO-A12H-01A.2_1.fastq
S-AO-A12H-01A.2_2.fastq

S-AC-A23E-01A.1_1.fastq
S-AC-A23E-01A.1_2.fastq

S-C8-A8HR-01A.5_1.fastq
S-C8-A8HR-01A.5_2.fastq

S-A8-A08A-01A.5_1.fastq
S-A8-A08A-01A.5_2.fastq

Câu trả lời:


0

Một cái gì đó như thế này sau đó?

while read -r folder tarfile sample; do
  find /path/to/directory/"$folder" -name "$tarfile" -execdir sh -c '
        tar -C /path/to/targetdirectory -xzvf "$0";
        for f in *.fastq; do
            mv "$f" "$1.${f#*.}";
        done' {} "$sample" \;
done <Foldernames

Tôi hoàn toàn không chắc chắn bạn cần findở đây, nhưng giải trình của bạn không tiết lộ chính xác những gì /path/tovà các thư mục con của nó đề cập đến, vì vậy tôi giả sử bạn biết bạn đang làm gì ở đó (hoặc làm thế nào để ngừng làm điều đó nếu bạn không) .


Từ tệp tar.gz tôi trực tiếp cần fastq's với tên mẫu là đầu ra. Và trong mã của bạn, nơi bạn đã đề cập về tập tin văn bản?
người mới bắt đầu

Tôi giả sử bạn có một tập tin tên Foldernames. Điều này đổi tên các fastqtập tin được trích xuất như bạn yêu cầu.
tripleee

Được. Bạn có thể vui lòng cho biết "$ 1. $ {F # *.}" Nghĩa là gì không?
người mới bắt đầu

"$sample"được thông qua như là $1. Sự thay thế tham số ${f#*.}có được giá trị $fkhi bắt đầu chuỗi lên qua dấu chấm đầu tiên được cắt bớt. (Nếu không có dấu chấm, sẽ không có sự cắt xén nào xảy ra.)
tripleee

Đây là lỗi tôi nhận được. tìm: '0027045b-9ed6-45af-a68e-f55037b5184c, UNCID_2210188.c71ca9f7-248f-460C-b5d3-afb2c648fef2.110412_UNC13-SN749_0051_AB0168ABXX_4.tar.gz, S-B6-A0I8-01A \ r': Không có tập tin hoặc thư mục
người mới bắt đầu
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.