заменить строки в исходном файле из другого файла по номеру строки

заменить строки в исходном файле из другого файла по номеру строки

Оригинальный текст:

yes
no
approved
declined

Второй текст

1111 1
333 4

1и 4это номера строк, которые я хотел бы заменить в исходном тексте

Выход:

1111
no
approved
333

как с этим справиться

решение1

Короткийawkподход:

awk 'NR==FNR{ a[$2]=$1; next }FNR in a{ $0=a[FNR] }1' file2 file1
  • a[$2]=$1- захват значений первого поля $1с использованием значения второго поля $2в качестве индекса массива a(при обработке первого входного файла, например file2)
  • $0=a[FNR]- заменить всю строку значением относительно текущего номера записи FNR(при обработке file1)

Выход:

1111
no
approved
333

решение2

Если вам нравится генерировать программы, вы можете использовать awk для создания скрипта sed:

awk '{printf "%dc\\\n%s\n", $2, $1}' < second  | sed -f - original

если ваш sed принимает stdin для скрипта, или:

awk '{printf "%dc\\\n%s\n", $2, $1}' < second > tempfile &&
sed -f tempfile original &&
rm tempfile

если ваш sed не принимает stdin для скрипта.

Промежуточный скрипт sed с вашим образцом входных данных выглядит следующим образом:

1c\
1111
4c\
333

Связанный контент