2012-03-15 5 views
-2

может кто угодно, пожалуйста, дайте мне знать, как я могу использовать следующую команду gawk в c? например, мы используем некоторые команды оболочки внутри c, используя функцию «system». далее я хочу дать число ниже команды, т.е. 6,2,8 в качестве параметров.using gawk inside c

gawk -v FIELDWIDTHS='6 2 8' 'NR!=1 && x==$1{printf(" %d:%d",strtonum("0x"$2),strtonum("0x"$3)); next}; {x=$1; printf("%s%s %d:%d", NR==1?"":"\n", $1,strtonum("0x"$2),strtonum("0x"$3))}; END{print ""}' input.txt | sed '/^[0-9a-f]* [0-9:]*$/d' > result.txt 

спасибо, любая помощь будет принята с благодарностью.

+4

И почему вы не можете просто использовать систему() для ее вызова? –

+0

Я попытался использовать system(), но я получаю следующую ошибку: prog.c: 73: error: 's 'uneclared (первое использование в этой функции) prog.c: 73: error: (Каждый необъявленный идентификатор только сообщается один раз prog.c: 73: ошибка: для каждой функции она появляется.) prog.c: 73: ошибка: синтаксическая ошибка до строковой константы prog.c: 73: ошибка: блуждание '\' в программе – mezda

+1

@ user1182722 Вам нужно избегать квот и обратных косых черт при вставке их в строковый литерал: '... $ 1 {prinf \"% d:% d \ ", ...', '...: \" \\ n \ ", ..." и так далее. –

ответ

1

Возможно, вы могли бы построить строку с переменными, используя snprintf, а затем передать команду popen, которая возвращает файл с выходом. Например:

char buffer[1024]; 
snprintf(buffer, sizeof(buffer), "<insert command here>", var1, var2); 
FILE output = popen(buffer, "r"); 

Я знаю, что вы направили вывод Result.txt в вашей команде, однако, если вы только собираетесь использовать выход в вашей программе гр файл, возвращаемый POPEN должно быть достаточно. Я не пробовал это сам, поэтому дайте мне знать, если это сработает.