У меня есть файл, содержит строки следующего формата:
w1 # 1 # x w2 # 4 # b w3 # 2 # d ...
Каждое слово (токен) в строке (например, w1 # 1 # x) состоит из 3 части, первая показывает некоторый индекс (в данном случае w1), вторая - целое число (в данном случае 1), а третья - символ (в данном случае x).
Теперь для каждого слова (токена) , Мне нужно напечатать дополнительное поле, которое будет вычисляться на основе значения второй и третьей части ( т.е., 4-я часть будет функцией 2-й и 3-й частей), а выходной файл должен выглядеть так:
w1 # 1 # x # f1 w2 # 4 # b # f2 w3 # 2 # d # f3 ...
где
f1 = function (1, x), f2 = function (4, b), f3 = function (2, d)
Теперь, используя шаблоны sed, я могу идентифицировать компоненты в каждом слове (токене), например,
echo $ line | sed "s / ([^ #] ) # ([^ #] ) # ([^ #] *) / \ 1 # \ 2 # \ 3 / g"
где \ 2 и \ 3 являются частями шаблона (я называю их частями шаблона из-за этой ссылки )
Теперь мне нужно вычислить четвертую часть с использованием \ 2 и \ 3. Я определил функцию оболочки getInfo (), которая принимает 2 аргумента, выполняет необходимые вычисления и возвращает мне четвертую часть. Проблема заключается в том, чтобы вставить эту функцию в команду sed. Я пробовал следующее:
echo $ line | sed "s / ([^ #] ) # ([^ #] ) # ([^ #] *) / \ 1 # \ 2 # \ 3`getInfo \ 2 \ 3` / g"
, но это не работает. Shell не получает части шаблона в качестве аргументов.
Итак, возникает вопрос:
Как передать части sed шаблона в оболочку (функцию)?
Я могу легко написать сценарий оболочки, который бы разделил строковое слово - по слову и выполнить требуемую работу, а затем сшить файл обратно, но я был бы очень признателен, если бы оболочка могла получать части шаблона в качестве аргументов от sed в команде sed.
С уважением,
Салил Джоши