#!/bin/bash

# ideone boilerplate - we can't write files in the home directory;
# so create a temporary directory for our files instead
t=$(mktemp -d -t ideone.XXXXXXXXXXXX) || exit
trap 'rm -rf "$t"' ERR EXIT
cd "$t"

init() {
    printf 'one %s\n' {1..5} >test1.txt
    printf 'two %s\n' {1..50} >test2.txt
}

init
nl *.txt

cat <<\_ >demo.py
# insert contents of "test1.txt" into "test2.txt" at line 20
with open("test1.txt", "r") as f1:
    t1 = f1.readlines()
with open("test2.txt", "r") as f2:
    t2 = f2.readlines()
t2.insert(20, t1)
with open("test2.txt", "w") as f2:
    f2.writelines(t2)
_

python3 demo.py 2>&1 || echo '** Original failed'

cat <<\_ >demo2.py
# insert contents of "test1.txt" into "test2.txt" at line 20
with open("test2.txt", "r+") as f2:
    for x in range(20):
        f2.readline()   # skip past early lines
    pos = f2.tell() # remember insertion position
    f2_remainder = f2.read()    # cache the rest of f2
    f2.seek(pos)
    with open("test1.txt", "r") as f1:
        f2.write(f1.read())
    f2.write(f2_remainder)
_
python3 demo2.py

nl test2.txt
echo '** Incorrect output above; try fixed version'
init

cat <<\_ >demo3.py
with open("test2.txt", "r+") as f2:
    for x in range(20):
        f2.readline()   # skip past early lines
    pos = f2.tell() # remember insertion position
    f2_remainder = f2.read()    # cache the rest of f2
    f2.seek(pos)
    with open("test1.txt", "r") as f1:
        for line in f1:
            f2.write(line)
    f2.write(f2_remainder)
_

python3 demo3.py

nl test2.txt

echo "** pavot.kutaj's version"

cat <<\_ >demo4.py
def main():
    with open("test2.txt", mode="rt", encoding="utf-8") as f1:
        source_list = [line.strip() for line in f1.readlines()]

    with open("test1.txt", mode="rt", encoding="utf-8") as f2:
        insert_list = [line.strip() for line in f2.readlines()]

    pos = source_list.index("two 21")
    source_list[pos: pos] = insert_list #a bit counter-intuitive slicing-approach

    with open("test2.txt", mode="w", encoding="utf-8") as f1:
        f1.write("\n".join(source_list))

if __name__ == "__main__":
    main()
_


init

python3 demo4.py

nl test2.txt