這個問題在這里已經有了答案: 在 bash 中回圈遍歷值對 [重復] (6 個回答) 17 小時前關閉。
我正在嘗試撰寫一個 for 回圈,我有條件地將 csv 檔案中的特定值決議為 do 命令。
我的情況如下:我有幾個包含基因組序列的目錄。樣本被編號并相應地命名目錄。
Dir 1 contains sample1_genome.fasta
Dir 2 contains sample2_genome.fasta
Dir 3 contains sample3_genome.fasta
基因組序列具有不同的平均讀取長度。解決這個問題很重要。因此,我創建了一個 csv 檔案,其中包含樣本編號和基因組序列的相應平均讀取長度。csv 檔案示例(第一列 = sample_no,第二列 = avg_read_length):
1,130
2,134
3,129
現在,我想遍歷目錄,將基因組序列作為輸入并將各自的平均讀取長度決議為該程序。
我的代碼如下:
for f in *
do
shortbred_quantify.py --genome $f/sample${f%}.fasta --aerage_read_length *THE SAMPLE MATCHING VALUE FROM 2nd COLUMN* --results results/quantify_results_sample${f%}
done
你能幫我解決這個問題嗎?
uj5u.com熱心網友回復:
使用awk. $2是第二個欄位,$1是第一個。例如:
$ cat input
1,130
2,134
3,129
$ awk '$2 == avgReadBP{ print $1 }' FS=, avgReadBP=134 input
2
所以你的命令最終看起來像:
input="$f"/genome_sample.fasta
shortbred_quantify.py --genome "$input" \
--avgreadBP "$(awk '$2 == a{ print $1 }' FS=, a="$value_to_match" "$input")" \
--results results/quantify_results_sample"${f}"
不要忘記參考檔案名。
uj5u.com熱心網友回復:
我會按照以下方式構建它:
while IFS=, read sample read_length
do
shortbred_quantify.py --genome "$sample/genome_sample.fasta" --avgreadBP "$read_length" --results "results/quantify_results_sample$sample"
done < ./input
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/377084.html
