записать содержимое 2-х файлов в другой файл

Проверьте свой рабочий каталог, возможно, у вас есть файл с именем result}, созданный

sed -r -e '/^[a-z]/{s/^.*$/(&)/; w result' -e '}' test

Существуют разные способы обхода проблемы, один из них — использование опции -eдля разделения команд. Когда используется w, все символы после него используются для имени файла и, следовательно, почему вы получили ошибку, поскольку {не имеет конечной пары

Дополнительная литература:Руководство GNU sed :Команды, требующие перехода на новую строку

0
07.03.2021, 14:34
2 ответа

Просто выполнение пары локальных тестов показывает, что команда sed h file >> destinationпримерно на 66% быстрее, чем catвам придется немного переписать свой скрипт, чтобы добавить вторую команду, потому что sedпринимает только один аргумент файла но в любом случае получилось быстрее.

РЕДАКТИРОВАТЬ :В тестах использовались файлы объемом 4 ГБ со случайным текстом и количеством символов Юникода, которые измерялись с помощью команды time.

0
18.03.2021, 22:26

Мой старый ноутбук с жестким диском примерно в два раза быстрее вашего тайминга.

Я подозреваю, что вы используете cat из BusyBox, а не только оптимизированную подставку -cat.

Я проверил тайминги в четырех командах, и все они вышли в одном и том же шаре -парке (с погрешностью 10% ). Я использовал GNU cat, sed, awk и dd. Я очищал кеши перед каждым тестом (в другом окне как sudo )с:
echo 3 > /proc/sys/vm/drop_caches.

sed (случайно )обрабатывает несколько входных файлов.

$ time cat Timer1 Timer2 > Timer3

real    1m57.536s
user    0m0.072s
sys     0m20.456s
$ 
$ time sed -e '1n' Timer1 Timer2 > Timer3

real    1m54.450s
user    0m15.924s
sys     0m23.420s
$ 
$ time awk 1 Timer1 Timer2 > Timer3

real    2m0.080s
user    0m21.752s
sys     0m21.444s
$ 
$ time { cat Timer1 > Timer3
>     dd status=none conv=notrunc oflag=append bs=100M if=Timer2 of=Timer3
> }
$

real    2m9.426s
user    0m0.012s
sys 0m18.260s
$
$ ls -lh Timer?
-rw-r--r-- 1 paul paul   17 Mar  7 11:01 Timer1
-rw-r--r-- 1 paul paul 3.7G Mar  7 11:03 Timer2
-rw-r--r-- 1 paul paul 3.7G Mar  7 11:50 Timer3
$ 
$ ls -l Timer?
-rw-r--r-- 1 paul paul         17 Mar  7 11:01 Timer1
-rw-r--r-- 1 paul paul 3942530050 Mar  7 11:03 Timer2
-rw-r--r-- 1 paul paul 3942530067 Mar  7 12:06 Timer3

Это говорит о том, что время зависит от производительности ввода-вывода, а используемая команда имеет гораздо меньшее значение. (Использование цикла чтения командной оболочки по-прежнему не лучшая идея.)

Примечательно, однако, что cat и dd занимают гораздо меньше времени пользователя, чем инструменты редактирования.

0
18.03.2021, 22:26

Теги

Похожие вопросы