Thủ thuật hữu ích khi làm việc với Ubuntu

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.fastqsample*_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.

Thẻ: Ubuntu Shell Script awk sed grep

Đăng vào ngày 25 tháng 7 lúc 16:55