我正在嘗試獲取我的 fastq 檔案的讀取次數,并且我希望輸出還包括我的檔案的名稱。我在網上找到了一個幾乎可以作業的解決方案,但仍然沒有得到正確的輸出。例子:
我的檔案名:
12S_C-T1-045_F_filt.fastq.gz
12S_C-T1-PL_F_filt.fastq.gz
...
我找到的代碼:
for file in ./*.fastq.gz
do
file_name=$(basename -s .fastq $file)
printf "$file_name\t$(cat ${file} | wc -l)/4|bc\n" >> no_reads_12S.txt
done
輸出:
12S_C-T1-045_F_filt.fastq.gz 114/4|bc
12S_C-T1-PL_F_filt.fastq.gz 26455/4|bc
...
所以,顯然計算不正確——數字甚至都不正確。我應該如何解決這個問題?我也試過這樣做:
for file in ./*.fastq.gz
do
file_name=$(basename -s .fastq.gz $file)
echo "$file_name"
echo $(zcat $file | wc -l)/4|bc
done
哪個有效,但是它給了我檔案名并在單獨的行中讀取數字。
謝謝!
uj5u.com熱心網友回復:
根據第二個腳本,請您嘗試:
#!/bin/bash
for file in ./*.fastq.gz; do
file_name=$(basename -s .fastq.gz "$file")
printf "%s\t%d\n" "$file_name" "$(echo $(zcat "$file" | wc -l) / 4 | bc)"
done
或作為單行:
for file in ./*.fastq.gz; do file_name=$(basename -s .fastq.gz "$file"); printf "%s\t%d\n" "$file_name" "$(echo $(zcat "$file" | wc -l) / 4 | bc)"; done
簡介printf
如下:
printf 格式 [引數]...
我們需要提供字串作為引數。第一個論點"$file_name"
將是顯而易見的。第二個論點"$(echo $(zcat "$file" | wc -l) / 4 | bc)"
可能需要解釋。首先,將命令$(zcat "$file" | wc -l)
替換為行數作為命令管道的輸出。然后外部命令將看起來像$(echo <number> / 4 | bc)
然后它被替換為的結果bc
并傳遞給printf
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/455975.html