system("awk 'BEGIN {i=0;}$0 ~/^D/ { i++; printf "i";}END {}' out.txt");
我在我的c ++代码中使用了这一行来计算out.txt中的一些行。它打印正确的价值。现在我需要在c ++中使用这个 i 计数值。任何人都可以帮我做这件事。
答案 0 :(得分:1)
您需要使用popen
,而不是system
。
见这里:http://pubs.opengroup.org/onlinepubs/009696799/functions/popen.html
它就像fopen()和system()之间的交叉,它将系统调用的输出“返回”为unix样式的管道,这很像一个FILE *。
答案 1 :(得分:0)
我认为我的一部分刚刚死在里面。以下c ++代码将为您计算行数:
#include <iostream>
#include <fstream>
int line_count(const char * fname)
{
std::ifstream input(fname);
int count=0;
if(input.is_open()){
std::string linebuf;
while(1){
std::getline(input, linebuf);
if(input.eof()){
break;
}
count++;
}
}else{
return -1;
}
return count;
}
int main(int argc, char * argv[])
{
int total=0;
for(int i=1; i!=argc; i++){
int rv=line_count(argv[i]);
if(rv<0){
std::cerr<<"unable to open file: "<<argv[i]<<std::endl;
}else{
std::cout<<"file "<<argv[i]<<" contains "<<rv<<" lines"<<std::endl;
total+=rv;
}
}
std::cout<<"Total number of lines = "<<total<<std::endl;
return 0;
}
(请注意,没有test4文件,只是为了显示错误报告)
[wc-l $] ./count_lines test1 test2 test3 test4
file test1 contains 8 lines
file test2 contains 13 lines
file test3 contains 16 lines
unable to open file: test4
Total number of lines = 37
[wc-l $]
这与wc -l输出相同:
[wc-l $] wc -l test1 test2 test3 test4
8 test1
13 test2
16 test3
wc: test4: No such file or directory
37 total
[wc-l $]