Tôi đã tạo tập lệnh Bash nhỏ này có một tham số (tên tệp) và sẽ phản hồi dựa trên phần mở rộng của tệp:
#!/bin/bash
fileFormat=${1}
nếu [[ ${fileFormat} =~ [Ff][Aa]?[Ss]?[Tt]?[Qq]\.?[[:alnum:]]+$ ]]; thì
echo "đó là tệp FASTQ";
elif [[ ${fileFormat} =~ [Ss][Aa][Mm] ]]; sau đó
echo "đó là tệp SAM";
khác
echo "nó không phải là fasta hay sam";
là
Đây là cách nó hoạt động:
sh script.sh tên file.sam
Nếu đó là fastq (hoặc FASTQ, hoặc fq, hoặc FQ, hoặc fastq.gz (nén)), tôi muốn tập lệnh cho tôi biết "đây là fastq". Nếu là sam, tôi muốn nó nói với tôi rằng đó là sam, nếu không, tôi muốn nó nói với tôi rằng đó không phải sam hay fastq.
câu hỏi: Khi tôi không tính đến kịch bản .gz (được nén), tập lệnh đã chạy tốt và cho tôi kết quả như mong đợi, nhưng đã xảy ra điều gì đó khi tôi cố gắng thêm phần cuối cùng có tính đến kịch bản này (xem dòng thứ ba , nơi nó nói một phần của .?[[:alnum:]]+ ). Phần này có nghĩa là "Trong tên file, sau phần mở rộng (fastq trong trường hợp này), có thể có dấu chấm theo sau là một số từ".
Đầu vào của tôi là thế này:
sh script.sh filename.fastq.gz
Và nó hoạt động. Nhưng nếu tôi đặt: sh script.sh filename.fastq
Nó nói đây không phải là fastq. Tôi muốn đặt phần cuối cùng là tùy chọn, nhưng nếu tôi thêm dấu "?" ở cuối thì nó không hoạt động. Có ý tưởng gì không? Cảm ơn! Vấn đề của tôi là sửa phần đó để hoạt động cho cả hai trường hợp.
Bạn có thể sử dụng biểu thức chính quy này:
Định dạng tệp = "$1"
nếu [[ $fileFormat =~ [Ff]([Aa][Ss][Tt])?[Qq](\.[[:alnum:]]+)?$ ]]; thì
echo "đó là một tập tin FASTQ"
elif [[ $fileFormat =~ [Ss][Aa][Mm]$ ]]; sau đó
echo "đó là một tập tin SAM"
khác
echo "nó không phải là fasta hay sam"
là
此处 (\.[[:alnum:]]+)?
Tạo nhóm cuối cùngKhông bắt buộc, nghĩa là một dấu chấm theo sau là hơn 1 ký tự chữ và số.
Khi bạn chạy nó:
./script.sh tên tệp.fastq
đó là một tập tin FASTQ
./script.sh fq
đó là một tập tin FASTQ
./script.sh tên tệp.fastq.gz
đó là một tập tin FASTQ
./script.sh tên tệp.sam
đó là một tập tin SAM
./script.sh tên tệp.txt
nó không phải là fasta hay sam
Về việc mẫu biểu thức chính quy để xác định phần mở rộng tệp trong tập lệnh Bash không chính xác để chụp các tệp nén, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/54094620/
Tôi là một lập trình viên xuất sắc, rất giỏi!