1

我对 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);
}
4

2 回答 2

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... */
}
于 2013-08-08T21:47:15.297 回答
1

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

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

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

它将通过将您的文本文件传输到程序来运行:

./program < textfile.txt
于 2013-08-08T21:50:49.147 回答