Самый простой инструмент здесь может быть sed. Для того, чтобы вставить b.txtв a.txtпосле 5 - й линии, вы могли бы написать:
sed '5r b.txt' a.txt
sedчитает файл, указанный как аргумент ( a.txt), построчно. Все строки воспроизводятся в выходных данных так же, как они появлялись во входных данных, если только они не изменены командой.
5Это адрес (номер строки) , при которой следующая команда должна быть выполнена. Команда, которую мы используем r, принимает имя файла в качестве аргумента (здесь b.txt), полностью его читает и вставляет в вывод после текущей строки.
Как указано выше, эта sedкомандная строка будет печатать только вывод на терминал, без записи в какие-либо файлы. Вы можете перенаправить его в новый файл (а не во входные файлы!), Используя перенаправление вывода Bash:
sed '5r b.txt' a.txt > c.txt
Или вы можете напрямую изменить внешний входной файл a.txtс помощью переключателя sed's -i(для "на месте"). Если вы напишите его как -i.bak, он сначала создаст резервную копию исходного входного файла с суффиксом .bak:
sed -i '5r b.txt' a.txt
Пример:
$ cat a.txt
January
February
March
April
May
October
November
December
$ cat b.txt
June
July
August
September
$ sed '5r b.txt' a.txt
January
February
March
April
May
June
July
August
September
October
November
December