Bash
將表格每一行中的一組值分別分配給 bash 中的命令
我有一個 txt 文件 (input.txt),其中 3 列由 \t 分隔。
62M__29_length_73210_cov_19.6684 28981-31993 minus 61M__32_length_66572_cov_22.1672 22311-25323 minus 60M__65_length_73281_cov_15.6315 28978-31990 minus 59M__78_length_80030_cov_19.1814 28973-31985 minus 58M__28_length_80029_cov_24.2362 28972-31984 minus 57M__31_length_73253_cov_24.4297 41300-44312 plus 56M__32_length_73450_cov_26.6071 28975-31987 minus 55M__29_length_73232_cov_26.5615 41244-44256 plus 54M__38_length_66570_cov_23.8255 41307-44319 plus
我需要以這種方式使用每一行的值執行命令:
blastdbcmd -db mydatabase -entry "row_1_column_1" -range "row_1_column_2" -strand "row_1_column_3" -out out.fa
例如,對於第 1 行,它將是:
blastdbcmd -db mydatabase -entry 62M__29_length_73210_cov_19.6684 -range 28981-31993 -strand minus -out out.fa
與
bash
:while IFS=$'\t' read -r entry range strand; do blastdbcmd -db mydatabase -entry "$entry" -range "$range" -strand "$strand" -out out.fa done <input.txt
逐行讀取輸入文件並將每一行拆分為三個由製表符分隔的變數。然後使用這些變數執行命令。
cat 將輸入文件轉換為 xargs 並重新格式化為所需的命令行。然後我們將命令行提供給 bash 並將標準輸出儲存在 out.fa 日誌文件中。
cat input.txt | xargs -r -l printf \ 'blastdbcmd -db mydatabase -entry %s -range %s -strand %s\n' | bash > out.fa