文本文件乘以bash linux

new*_*log 2 bash text file lines repeat

例如,我有一个包含5行的文本文件:

one
two
three
four
five
Run Code Online (Sandbox Code Playgroud)

我想制作一个脚本来制作一个包含上面文件循环的2000行文件,它看起来像

    one
    two
    three
    four
    five
    one
    two
    three
    four
    five
    one
    two
    three
    four
    five
 ............repeat until n times is reached
Run Code Online (Sandbox Code Playgroud)

ajr*_*eal 5

如果需要重复2000次

for i in {1..2000}; do cat "FILE"; done > NEW_FILE
Run Code Online (Sandbox Code Playgroud)


Dan*_*ing 5

测试表明,这比目前给出的下一个最佳方法快约100倍.

#!/bin/bash                                                                     

IN="${1}"
OUT="${2}"

for i in {1..2000}; do
    echo "${IN}"
done | xargs cat > "${OUT}"
Run Code Online (Sandbox Code Playgroud)

之所以这么快,是因为它不会重复打开,寻找结束,追加和关闭输出文件.它打开输出文件一次,并在一次大的连续写入中将数据流式传输到它.它也会cat尽可能少地调用它.它cat甚至可以调用一次,具体取决于系统的最大命令行长度和输入文件名的长度.