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