使用 awk 转置多个记录



我正在尝试将我的洪流程序 Deluge 的输出转换为我可以放入 php 文件中的列中的东西。

洪水控制台信息的输出如下所示(示例):

Name: 2014-01-07-wheezy-raspbian.zip
ID: ebd9f05d220e7afd62fcbb10743bf9210a59efd5
State: Seeding Up Speed: 0.0 KiB/s
Seeds: 0 (10) Peers: 0 (0) Availability: 0.00
Size: 780.0 MiB/780.0 MiB Ratio: 17.988
Seed time: 10 days 16:29:52 Active: 10 days 17:44:08
Tracker status: raspberrypi.org: Announce OK
Name: ArchLinuxARM-2014.01-rpi.img.zip
ID: d8b3fb8bf7064108d26390d8a3ec586b70182e18
State: Seeding Up Speed: 0.0 KiB/s
Seeds: 0 (3) Peers: 0 (0) Availability: 0.00
Size: 182.7 MiB/182.7 MiB Ratio: 8.222
Seed time: 10 days 16:05:32 Active: 10 days 16:49:27
Tracker status: raspberrypi.org: Announce OK

我如何使用awk来获得这样的东西:

Name                            State    Ratio   Size
2014-01-07-wheezy-raspbian....  Seeding  17.988  780.0 MB
ArchLinuxARM-2014.01-rpi.im...  Seeding   8.222  182.7 MB

我知道我必须使用不同的输入和输出变量来实现这一目标,但作为一个 awk 的新手,我希望能得到一点入门帮助。

运行命令时,控制台如下所示:http://www.tiikoni.com/tis/view/?id=e34da2a

你可以使用这个awk:

awk -F ': *| +' '$1 ~ /Name|Size|State/{a[$1]=$2}
   NF > 1 && $(NF-1) ~ /Ratio/{
     printf "%-40s %-15s %10s %10s MBn", a["Name"], a["State"], $NF, a["Size"];
     delete a; next}' file
2014-01-07-wheezy-raspbian.zip           Seeding             17.988      780.0 MB
ArchLinuxARM-2014.01-rpi.img.zip         Seeding              8.222      182.7 MB
$ awk -v RS= '{print $2, $6, $24, $20, "MB"}' file
2014-01-07-wheezy-raspbian.zip Seeding 17.988 780.0 MB
ArchLinuxARM-2014.01-rpi.img.zip Seeding 8.222 182.7 MB

使用 printf 而不是打印来根据需要设置格式。

为什么你不想使用 php 本身?

<body>
<table border=1>
<tr>
    <td>Name</td>
    <td>State</td>
    <td>Ratio</td>
    <td>Size</td>
</tr>
<?php
$output=array();
exec("FULL_PATH_TO_DELUGE_CONSOLE/deluge-console info",$output);
$raw=explode("n", $output);
foreach ($raw as $row)
{
    $resultset=explode(' ',$row);
    switch ($resultset[0])
    {
        case 'Name:':
            $name=$resultset[1];
            break;
        case 'State:':
            $state=$resultset[1];
            break;
        case 'Size:':
            $size=$resultset[1];
            $ratio=$resultset[5];
            echo '<tr><td>'.$name.'</td><td>'.$state.'</td><td>'.$ratio.'</td><td>'.$size.'</td></tr>';
            break;
    }
}
?>
</table>
</body>

with awk

deluge-console info|awk '$1=="Name:" {name=$2} $1=="State:" {state=$2} $1=="Size:" {print name,state,$6,$2}' >output_file

相关内容

  • 没有找到相关文章

最新更新