\ tで区切られた3つの列を持つtxtファイル(input.txt)があります。
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
答え1
そして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
入力ファイルを1行ずつ読み、各行を3つのタブで区切られた変数に分割します。次に、この変数を使用してコマンドを実行します。
答え2
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