Dưới đây là một số đoạn mã và lệnh hữu ích mà bạn có thể sử dụng trong môi trường Ubuntu để xử lý tệp và dữ liệu, đặc biệt hữu ích trong các tác vụ liên quan đến sinh học tính toán.
Xóa các tệp chỉ chứa ký tự "#" trên mỗi dòng
Script sau đây sẽ duyệt qua tất cả các tệp trong một thư mục được chỉ định. Nếu tất cả các dòng trong một tệp đều chứa ký tự "#", tệp đó sẽ bị xóa.
#!/bin/bash
# Thư mục cần kiểm tra
target_dir="/path/to/your/directory"
# Lặp qua từng tệp trong thư mục
for file in "$target_dir"/*
do
# Kiểm tra xem có bất kỳ dòng nào KHÔNG chứa "#" không
if awk '!/#/' "$file" | read -r _
then
# Nếu có dòng không chứa "#", bỏ qua tệp này
continue
else
# Nếu tất cả các dòng đều chứa "#", xóa tệp
rm "$file"
fi
done
Trích xuất tên chuỗi FASTA vào tệp văn bản
Để chỉ lấy các dòng bắt đầu bằng ">" từ một tệp FASTA và lưu chúng vào một tệp khác:
grep ">" fasta_file > output_file
Trích xuất phần tên chuỗi FASTA trước dấu phân cách đầu tiên
Các lệnh sau đây sử dụng sed để cắt bỏ phần tên chuỗi FASTA sau một dấu phân cách cụ thể (dấu chấm, dấu gạch dưới, dấu cộng, hoặc khoảng trắng đầu tiên).
# Giữ lại phần trước dấu chấm đầu tiên
sed -n 's/^\(>[^.]*\)\..*/\1/p' input.fasta > output.fasta
# Giữ lại phần trước dấu gạch dưới đầu tiên
sed -n 's/^\(>[^_]*\)_.*/\1/p' input.fasta > output.fasta
# Giữ lại phần trước dấu cộng đầu tiên (cần escape ký tự đặc biệt)
sed -n 's/^\(>[^+]*\)\+.*/\1/p' input.fasta > output.fasta
# Giữ lại phần trước khoảng trắng đầu tiên
sed -n 's/^\(>[^ ]*\).*/\1/p' input.fasta > output.fasta
Loại bỏ phần nội dung sau khoảng trắng đầu tiên trong tên chuỗi FASTA
Lệnh awk sau đây sẽ chỉ giữ lại trường đầu tiên (trước khoảng trắng đầu tiên) của mỗi dòng trong tệp FASTA.
awk '{print $1}' your_fasta_file.fasta > new_fasta_file.fasta
Xóa các dòng chứa một chuỗi ký tự cụ thể khỏi tệp
Sử dụng grep -v để loại bỏ các dòng có chứa từ "unknown".
grep -v "unknown" file.txt > newfile.txt
Xóa các tệp rỗng trong thư mục
Lệnh này tìm tất cả các tệp có kích thước 0 byte trong thư mục hiện tại và các thư mục con, sau đó xóa chúng.
find . -type f -size 0c | xargs -n 1 rm -f
Kiểm tra tính toàn vẹn của tệp bằng MD5
Sử dụng lệnh md5sum để tính toán và hiển thị mã MD5 của một tệp.
md5sum filename
Gom các tệp có đặc điểm tương tự trong thư mục thành một dòng
Đoạn mã shell này tìm tất cả các thư mục con có tên kết thúc bằng ".IS" trong thư mục hiện tại và liệt kê chúng thành một dòng, cách nhau bởi dấu cách.
# Tìm kiếm các thư mục
folder_list=$(find . -maxdepth 1 -type d -name '*.IS' | tr '\n' ' ')
echo "$folder_list"
find . -maxdepth 1 -type d -name '*.IS': Tìm các thư mục (-type d) trong thư mục hiện tại (.) và chỉ ở độ sâu 1 (-maxdepth 1) có tên kết thúc bằng ".IS" (-name '*.IS').tr '\n' ' ': Thay thế ký tự xuống dòng (\n) bằng dấu cách (' ') để gom các kết quả tìm được vào một dòng.
Gom tên các tệp FASTQ thành một dòng, cách nhau bằng dấu phẩy và sắp xếp
Đoạn mã shell này lấy các cặp tệp FASTQ (sample*_R1.fastq và sample*_R2.fastq) trong thư mục hiện tại, sắp xếp và gom chúng thành hai chuỗi, mỗi chuỗi chứa tên các tệp R1 hoặc R2, cách nhau bằng dấu phẩy.
# Lấy danh sách tệp R1 và chuyển thành chuỗi cách nhau bởi dấu phẩy
read1_files=$(ls sample*_R1.fastq | paste -sd "," -)
# Lấy danh sách tệp R2 và chuyển thành chuỗi cách nhau bởi dấu phẩy
read2_files=$(ls sample*_R2.fastq | paste -sd "," -)
# In ra để kiểm tra
echo "Read 1 files: $read1_files"
echo "Read 2 files: $read2_files"
ls sample*_R1.fastq: Liệt kê các tệp khớp với mẫu `sample*_R1.fastq`.paste -sd "," -: Ghép các dòng đầu vào (-) thành một dòng duy nhất (-s), sử dụng dấu phẩy (-d ",") làm dấu phân cách.
Gom và sắp xếp các cặp tệp FASTQ, kết hợp các tệp FASTQ bằng dấu '/'
Script này xử lý các tệp FASTQ theo cặp (R1 và R2) dựa trên tiền tố, sắp xếp chúng và gom lại theo định dạng mong muốn.
#!/bin/bash
# Kích hoạt môi trường conda (ví dụ)
source /home/zhongpei/miniconda3/bin/activate BASALT
# Biến lưu kết quả xử lý cặp tệp FASTQ
output_fastq=""
# Lặp qua các tiền tố tệp sau khi loại bỏ phần _clean_.*.fastq.gz, sắp xếp và lấy duy nhất
for prefix in $(ls J*.fastq.gz | sed -e 's/_clean_.*.fastq.gz//' | sort | uniq)
do
file1="${prefix}_clean_1.fastq.gz"
file2="${prefix}_clean_2.fastq.gz"
# Kiểm tra sự tồn tại của cả hai tệp
if [[ -f "$file1" && -f "$file2" ]]
then
# Thêm dấu '/' nếu output_fastq đã có nội dung
if [[ -n "$output_fastq" ]]
then
output_fastq="${output_fastq}/"
fi
# Thêm cặp tệp vào chuỗi output
output_fastq="${output_fastq}${file1},${file2}"
fi
done
# In kết quả
echo "$output_fastq"
# Biến lưu kết quả xử lý tệp metaMIC.fa
output_contigs=""
# Lặp qua các tiền tố tệp sau khi loại bỏ _metaMIC.fa, sắp xếp và lấy duy nhất
for prefix in $(ls J*_metaMIC.fa | sed -e 's/_metaMIC.fa//' | sort | uniq)
do
file_contig="${prefix}_metaMIC.fa"
# Thêm dấu ',' nếu output_contigs đã có nội dung
if [[ -n "$output_contigs" ]]
then
output_contigs="${output_contigs},"
fi
# Thêm tên tệp vào chuỗi output_contigs
output_contigs="${output_contigs}${file_contig}"
done
# In kết quả
echo "$output_contigs"
Kiểm tra tiến trình chạy của script Shell
Lệnh sau đây giúp kiểm tra xem một tiến trình shell cụ thể có đang chạy hay không.
ps -ef | grep sratoolkit_handle1.sh | grep -v grep
ps -ef: Hiển thị tất cả các tiến trình đang chạy.grep sratoolkit_handle1.sh: Lọc ra các dòng có chứa tên script bạn đang tìm kiếm.grep -v grep: Loại bỏ dòng chứa chính lệnh `grep` để tránh nhầm lẫn.