
Оригинальный текст:
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