Bashのlist.txtで複数のファイル名を作成するには?

Bashのlist.txtで複数のファイル名を作成するには?

1つのファイルの名前を使用して一度に複数のファイルを作成したいと思いますlist.txt。どうすればいいですか?

サンプルlist.txt:

EOG090W002U
EOG090W00C1
EOG090W00DC
EOG090W00DE
EOG090W00E5
EOG090W00HR
EOG090W00MH
EOG090W00MS
EOG090W00PB
EOG090W00U4
EOG090W00UK
EOG090W00WM
EOG090W00WR

list.txtいくつかのID番号を含むこれがあるとしましょう。次に、これらのIDを名前として別々のファイルを作成したいと思います(例:、、、EOG090W002U_M0.ctl)。また、それに応じてファイルの内容も変更する必要があります。たとえば、ファイルの内容は次のとおりです。EOG090W00C1_M0.ctlEOG090W00DC_M0.ctlEOG090W002U_M0.ctlEOG090W00C1_M0.ctl

seqfile = EOG090W002U_p.phy
treefile = Constant.txt
outfile = EOG090W002U_M0_mlc

または

seqfile = EOG090W00C1_p.phy
treefile = Constant.txt
outfile = EOG090W00C1_M0_mlc

*.phyのようConstant.txtなフォルダで使用できます。

答え1

最も簡単:

xargs touch <List.txt

魔法は、xargs標準入力のすべての行を取得し、コマンドに引数として追加することです。

答え2

スクリプトでGNU並列処理を使用する:

#!/bin/bash

constant=constant

populate_file () {
    local const=$1
    local file=$(basename -s '.M0.ctl' "$2")
    printf '%s\n%s\n%s\n' \
    "seqfile = ${file}_p.phy" \
    "treefile = ${const}.txt" \
    "outfile = ${file}_M0_mlc" > "$2"
}

export -f populate_file

parallel populate_file "$constant" {}.M0.ctl :::: list.txt

その後、各行の行を並列に読み込み、list.txt関数を実行します。populate_fileこのpopulate_file関数は、必要な形式で各ファイルに3行を出力します。

GNU 並列処理がない場合は、読み込み中にループを使用できます。

#!/bin/bash

constant=constant

populate_file () {
    local const=$1
    local file=$(basename -s '.M0.ctl' "$2")
    printf '%s\n%s\n%s\n' \
    "seqfile = ${file}_p.phy" \
    "treefile = ${const}.txt" \
    "outfile = ${file}_M0_mlc" > "$2"
}

while IFS= read -r file; do
    populate_file "$constant" "${file/ /}.M0.ctl"
done < list.txt

答え3

次のように試すことができます。 for i in $(cat list.txt); do touch $i; done

答え4

#!/bin/bash

tr -d '[:blank:]' < list.txt > outputFile.tmp

for i in $(cat outputFile.tmp)
do
  echo "seqfile = ${i}_p.phy" >> ${i}_M0.ctl
  echo "treefile = constant.txt" >> ${i}_M0.ctl
  echo "outfile = ${i}_M0_mlc" >> ${i}_M0.ctl
done
exit 0

説明する:

  1. tr -d '[:blank:]' < list.txt > outputFile.tmpリストからスペースを削除してコピーします。outputFile.tmp
  2. forファイルのすべての行を繰り返し、outputFile.tmpファイルを動的に生成して、必要なコンテキストをファイルに追加します。

関連情報