У меня есть файл, который имеет два столбца значений с плавающей запятой. У меня также есть программа на C, которая принимает значение с плавающей запятой в качестве ввода и возвращает другое значение с плавающей запятой в качестве вывода.
Я хотел бы сделать следующее: для каждой строки в оригинале выполнить программу на C со значением в первом столбце в качестве входных данных, а затем распечатать первый столбец (без изменений), за которым следует второй столбец минус результат программы на C.
В качестве примера предположим, что c_program возвращает квадрат ввода и ведет себя так:
$ c_program 4
16
$
и предположим, что data_file выглядит следующим образом:
1 10
2 11
3 12
4 13
Что я хотел бы вернуть в качестве вывода, в данном случае, это
1 9
2 7
3 3
4 -3
Чтобы написать это в действительно схематичном псевдокоде, я хочу сделать что-то вроде этого:
awk '{print $ 1, $ 2 - `c_program $ 1`}' data_file
Но, конечно, я не могу просто передать $ 1, переменную awk, в вызов c_program. Как правильно это сделать, и желательно, как я могу это сделать, сохраняя при этом «awk one-liner»? (Я не хочу вытащить кувалду и написать для этого полноценную программу на C).