Bash의 list.txt에서 여러 파일 이름을 만드는 방법은 무엇입니까?

Bash의 list.txt에서 여러 파일 이름을 만드는 방법은 무엇입니까?

한 파일의 이름을 사용하여 한 번에 여러 파일을 만들고 싶습니다 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

*.phyConstant.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_filepopulate_file함수는 원하는 형식으로 각 파일에 세 줄을 출력합니다.

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파일을 동적으로 생성하여 필요한 컨텍스트를 파일에 추가합니다.

관련 정보