从awk输出获取c ++值

时间:2013-12-11 10:44:28

标签: c++ awk

system("awk 'BEGIN {i=0;}$0 ~/^D/ { i++; printf "i";}END {}' out.txt"); 

我在我的c ++代码中使用了这一行来计算out.txt中的一些行。它打印正确的价值。现在我需要在c ++中使用这个 i 计数值。任何人都可以帮我做这件事。

2 个答案:

答案 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 $]