あるファイルの行を繰り返し、別のファイルに挿入して毎回新しいファイルを作成するには?

あるファイルの行を繰り返し、別のファイルに挿入して毎回新しいファイルを作成するには?

私のファイル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
    

関連情報