C-Linux-如何将C参数值发送到awk脚本?

时间:2013-08-08 21:42:38

标签: c linux awk

我对Linux很新,不熟悉C.这里我有两个问题。

我正在编写一个在Linux上运行的C程序。我在同一文件夹中有一个文件名f.txt。有一些像这样的字段:

Jason 12 Male

我想比较每行的txt文件的$ 2和参数a的值。如果该行的第二个字段大于a,则打印第一个字段$ 1.

我尝试过这样的代码但不行。有人可以帮忙吗?谢谢!

void main()
{ int a;
  scanf("%d",&a);
  char* comm="awk '{if($2>"+a+") print $1}' f.txt";
  system(comm);
}

2 个答案:

答案 0 :(得分:2)

对于您所陈述的问题,这只是基本的文本文件处理,使用脚本语言本身解决此任务可能最简单,而不是使用C(例如python,perl或awk本身)。

对于您的编程问题,C语言不支持这种字符串连接。您必须使用snprintf()调用(或通过调用strcat())来构建字符串。

char comm[512];

int r = snprintf(comm, sizeof(comm), "awk '{if($2>%d) print $1}' f.txt", a);
if (r < 0) {
    /* error */
} else if (r < sizeof(comm)) {
    /* ok */
} else {
    /* need a bigger comm buffer... */
}

答案 1 :(得分:1)

处理此问题的另一种方法如下:使用以下代码段从stdin读取字节:

while ( ( char *data = scanf( "%s %d %s\n" ) ) != EOF )

...换行符是你的分隔符。然后,您可以对“数据”执行适当的操作,以单独访问每个字段。

通过将文本文件传递给程序来运行它:

./program < textfile.txt