Первое, что я бы попробовал, это выполнить ваш скрипт с помощью at
или cron
.
Пример:
at now <<< "sudo echo 'This will fail if sudoers requiretty' 2>/tmp/stderr >/tmp/stdout"
В соответствии с содержанием, которое вы привели в примере Вот что я вам предлагаю
echo -en " `head -1 file1`" >> file2
Попробуйте это,
sed -i "$ s/$/ $(head -1 file1)/" file2
testing 123
$
отредактируйте последнюю строку файла. s/$
Замените EOL на $(head -1 file1)
, что является первой строкой файла1. Задача менее очевидна, чем кажется на первый взгляд.
Либо вы используете код от Slyx и затем удаляете ненужную новую строку с sed $!N;$s/\n//;P;D
, либо вы находите строку, которая, как известно, не является частью обоих файлов, скажем, =snip=
и делаете
sed '1h;1,/=snip=/d;$G;s/\n/ /' file1 <( echo =snip=) file2
Вывод может быть передан в другой файл, а затем скопирован в file2
(, даже если ваш вариант sed
имеет параметр -i
, это не будет работать при использовании частей двух файлов ).
Что делает код?
1h
сохраняет строку 1 в области хранения («буфер обмена» sed
), чтобы добавить ее позже 1,/=snip=/d
удаляет все от строки 1 до строки маркера, поэтому будет напечатано только file2
$G
добавляет сохраненную строку из пробела к последней строке($
)s/\n/ /
заменяет встроенный символ новой строки пробелом. Это произойдет только в последней строке после добавления пробела file1 <( echo =snip=) file2
— это файлы, переданные вsed
:сначала file1
для извлечения первой строки, затем виртуальный файл, содержащий =snip=
, чтобы узнать, когда заканчивается файл 1, наконецfile2
На самом деле, неплохо научиться sed
трюкам.
Естьed
:
ed file2 <<END
1a
$(head -n 1 file1)
.
1s/$/ /
1,2j
wq
END
Но awk может быть понятнее:
awk -v "f1=$(head -n1 file1):" 'NR == 1 {$0 = $0 FS f1} 1' file2
Это не сохраняет файл2 на месте. Для этого вы можете использовать GNU awk
.gawk -i inplace -v "f1=$(head -n1 file1):" 'NR == 1 {$0 = $0 FS f1} 1' file2
или с любым awk:
awk -v... file2 > tmpfile2 && mv tmpfile2 file2
Еще один вариант гавка
gawk '
FNR == 1 { if (NR == FNR) {f1 = $0; nextfile} else {$0 = $0 FS f1} }
{print}
' file1 file2