如何迭代并将一个文件的一行插入另一个文件中,每次创建一个新文件?

如何迭代并将一个文件的一行插入另一个文件中,每次创建一个新文件?

我的文件 1 包含:

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

等等,通过“text2000”。注意 - 包括引号。

我有另一个包含代码脚本的文件。

我想浏览文件 1 并将“textx”与代码脚本一起放入文件中,每次创建一个新文件。所以我应该创建 2000 个文件。我还想将每个文件命名为 1.js-2000.js。

例如,生成的文件将具有:

"Text1"

base code

我怎么能这样做呢?作为参考,我目前正在尝试使用 bash,但对其他选项持开放态度。

答案1

在 shell 中很容易做到:

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

这里file1有您要添加的文本字符串,也是file2您的代码。我在一个file2有 96 行 shell 代码和file12000 个字符串的小型计算机上测试了这个,在我的机器上花费了大约 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 机器上的任何 shell 中使用任何 awk:

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

相关内容