한 파일의 줄을 반복하고 다른 파일에 삽입하여 매번 새 파일을 만드는 방법은 무엇입니까?

한 파일의 줄을 반복하고 다른 파일에 삽입하여 매번 새 파일을 만드는 방법은 무엇입니까?

내 파일 1에는 다음이 포함되어 있습니다.

"text1"
"text2"
"text3"
"text4"

잠깐, "text2000"을 전달하세요. 참고 - 따옴표를 포함하세요.

코드 스크립트가 포함된 다른 파일이 있습니다.

파일 1을 살펴보고 코드 스크립트와 함께 "textx"를 파일에 넣고 매번 새 파일을 만들고 싶습니다. 그래서 2000개의 파일을 생성해야 합니다. 또한 각 파일의 이름을 1.js-2000.js로 지정하고 싶습니다.

예를 들어 생성된 파일에는 다음이 포함됩니다.

"Text1"

base code

어떻게 해야 하나요? 참고로 저는 현재 bash를 사용하려고 하는데 다른 옵션도 열려 있습니다.

답변1

셸에서는 쉽게 수행할 수 있습니다.

c=0
while IFS= read -r text; do 
  {
    printf '%s\n' "$text"
    cat file2
  } > "newFile$((c += 1))"
done < file1

여기에 file1추가하려는 텍스트 문자열이 있으며 이는 file2코드이기도 합니다. 나는 이것을 file296줄 file1의 쉘 코드와 2000개의 문자열을 가진 작은 컴퓨터에서 테스트했는데, 내 컴퓨터에서는 약 4초가 걸렸습니다. 그러나 file2규모가 크다면 다른 언어 및/또는 접근 방식을 사용하는 것을 고려해야 합니다.

답변2

@terdon의 답변을 약간 조정하려면 다음을 사용하십시오 bash.

  • 실제로 첫 글자를 대문자로 쓰고 싶다고 가정합니다.
  • 루프에서 외부 명령을 호출하지 않으면 성능이 향상됩니다.
# read the code file just once
code=$(< scriptFile)

c=1
while IFS= read -r line; do
    prefix=${line%%[[:alpha:]]*}    # the leading non-alpha chars of $line
    text=${line#"$prefix"}          # the rest of the line

    printf '%s%s\n\n%s\n' "$prefix" "${text^}" "$code" > "newFile${c}"
    ((++c))
done < file1

답변3

모든 Unix 시스템의 모든 쉘에서 awk를 사용하십시오.

awk '
NR==FNR {
    code = code ORS $0
    next
}
{
    print $0 ORS code > (FNR ".js")
    close(FNR ".js")
}
' codefile file1
    

관련 정보