Я хочу заменить несколько (непоследовательных) строк большого файла, используя файлы, содержащие одну строку. То, что я нашел для работы:
for i in ${list[@]}; do
line=$(cat file_$i.txt);
sed -i "$i c $line" bigfile.txt;
done
Здесь list
содержит строки, которые я хочу заменить. Вот пример:
$ list=(1 3 4 7)
$ cat file_1.txt
this is the new line 1
$ cat file_3.txt
this is the new line 3
$ cat file_4.txt
this is the new line 4
$ cat file_7.txt
this is the new line 7
$ cat bigfile.txt
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
Вывод приведенного выше сценария:
$ cat bigfile.txt
newline 1
line 2
newline 3
newline 4
line 5
line 6
newline 7
line 8
Он работает, но на каждом шаге l oop sed
открывает и читает Целый файл, насколько я понимаю, поэтому этот метод очень медленный. Каковы другие более быстрые способы сделать это, предпочтительно используя sed
?