2014-02-12 66 views
1

我試圖將我的洪流程序的輸出轉移到我可以放入php文件的列中。用awk轉置多個記錄

洪水控制檯信息看起來像這樣(例如)輸出:

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

回答

0

爲什麼你不想使用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> 
+0

我對php很少有經驗,我只希望只使用awk,並在項目中已有的其他模塊的副本中實現代碼。 雖然這可能有所幫助。我只需要在這個文本的頂部添加'<?php'使其成爲一個功能性的php文件? – armandg

+0

我添加了一些代碼。現在,您可以簡單地將此代碼複製到空的.php文件中。不要忘記將FULL_PATH_TO_FILE更改爲torrent的輸出文件的完整路徑。 – rjhdby

+0

啊,沒有輸出文件本身,只有一個命令,我可以運行獲取該信息。我在原始文章中加入了一張圖片以供澄清。 我已經查看了項目中的其他模塊-php文件,並且似乎很多人都設置了bash命令的exec()變量。 – armandg

1

您可以使用此AWK:

awk -F ': *| +' '$1 ~ /Name|Size|State/{a[$1]=$2} 
    NF > 1 && $(NF-1) ~ /Ratio/{ 
    printf "%-40s %-15s %10s %10s MB\n", 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 
+0

「file」變量是如何工作的這個代碼? – armandg

+0

文件是在這裏輸入文件的名稱,所以只需將其替換爲您的實際日誌文件名稱。 – anubhava

+0

啊,本身沒有日誌文件輸出,只有終端命令的結果。我在原始文章中放置了命令結果的截圖,以供參考。 – armandg

0

使用awk

deluge-console info|awk '$1=="Name:" {name=$2} $1=="State:" {state=$2} $1=="Size:" {print name,state,$6,$2}' >output_file 
0
$ 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而不是打印你喜歡的格式。