sed
делает это относительно легко. Например:
$ sed -n "/$(sed -n '/uniquename2/s/.*[:]//p' file1)/s/.*[:]//p" file2
apple
или
$ sed -n "/$(sed -n '/uniquename3/s/.*[:]//p' f1)/s/.*[:]//p" f2
hello
Вы просто используете подстановку команды $(sed -n '/uniquename3/s/.*[:]//p' f1)
, чтобы получить uniquekey
из uniquename
, обрезая ведущую часть строки, и затем делаете то же самое с результатом, чтобы получить искомый результат. строка с sed -n "/$(command)/s/.*[:]//p"
с использованием двойных кавычек на внешней стороне, чтобы позволить подстановке команды развернуться.
Форма используемой базовой команды sed
представляет собой нормальную подстановку s/find/replace
с полным совпадением шаблонов для общего числа
sed '/match/s/find/replace/`
-n
подавляет обычную печать пространства шаблона, а p
в конце заставляет его печатать при успешном совпадении и замене.
Если uniquename
или uniquekey
Содержат символы регулярного выражения
С учетом вашего комментария о том, что ваш фактический файл возвращает ошибку, каждый uniquename
или uniquekey
в ваших реальных файлах содержит символы, которые можно интерпретировать как регулярные выражения. В этом случае должно работать решение GNU awk
, использующее переменную FILENAME
для извлечения необходимой информации из каждого файла на основе полей, разделенных ':'
, например.
$ awk -F: -v name=uniquename2 '
FILENAME == "file1" { $1 == name && key = $NF }
FILENAME == "file2" { if ($1 == key) print $NF }
' file1 file2
apple
Дайте мне знать, если у вас есть проблемы там. Кроме того, если вы можете опубликовать несколько реальных примеров (скажем, по 10 строк) ваших file1
и file2
, это поможет.