Копирование первой строки текста в другой текстовый файл

Первое, что я бы попробовал, это выполнить ваш скрипт с помощью atили cron.

Пример:

at now <<< "sudo echo 'This will fail if sudoers requiretty' 2>/tmp/stderr >/tmp/stdout" 
-1
17.07.2019, 10:10
4 ответа

В соответствии с содержанием, которое вы привели в примере Вот что я вам предлагаю

echo -en " `head -1 file1`" >> file2
0
28.01.2020, 05:12

Попробуйте это,

sed -i "$ s/$/ $(head -1 file1)/" file2
testing 123
  • $отредактируйте последнюю строку файла.
  • s/$Замените EOL на $(head -1 file1), что является первой строкой файла1.
0
28.01.2020, 05:12

Задача менее очевидна, чем кажется на первый взгляд.

Либо вы используете код от 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трюкам.

0
28.01.2020, 05:12

Есть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
0
28.01.2020, 05:12

Теги

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