将awk分配给php中的变量

时间:2018-01-17 06:24:59

标签: php awk

我有以下代码。它提供了所需的信息,但是我想将输出分配给变量。

$cmd = "ssh machine 'cat /usr/local/reports/file.dat | awk -F'[[:space:]][[:space:]][[:space:]]*' '{print \"<tr><td>\"$2\"</td><td>\"$3\"</td></tr>\"}'";
system($cmd);

这正确运行并生成一个包含文件中第2列和第3列的表。但是,我现在想将列分配给文件中读取的每一行的变量。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

system始终直接输出命令输出。您可以使用输出缓冲来捕获它,但您应该使用shell_exec代替:

$result = shell_exec( $cmd );

答案 1 :(得分:1)

很少有建议:

  1. 使用heredoc使读者更友好
  2. 避免cat /usr/local/reports/fileawk可以直接读取文件,不需要使用cat命令
  3. 如果您想要使用exec()功能来处理返回状态。 shell_exec()将所有输出流作为字符串返回。 exec默认返回输出的最后一行,但可以将所有输出作为指定为第二个参数的数组提供。
  4. 以下是代码段

    <?php
    
    $cmd =<<<EOF
    ssh user@host "awk -F'[[:space:]][[:space:]][[:space:]]*' '{
                   print \"<tr><td>\" $2 \"</td><td>\" $3 \"</td></tr>\" 
               }
               ' /usr/local/reports/file.dat 2>&1"
    EOF;
    
    /* 
         execute command in 1st argument, 
         save output in array in 2nd argument  
         store status in 3rd argument
    */
    exec($cmd, $out, $return);
    
    if($return==0)
    {
        print_r($out);
    
           /* your case you can just 
              echo implode(PHP_EOL, $out);
           */   
    }else{
        /* Failed to execute command 
           do some error handling */ 
    
        die( 'Failed to execute command : '. $cmd );
    }
    
    ?>