1

想要 grep 文件并像分隔的 var 一样导出行,最后两个在一个 var 中。之后创建循环并导出 html 标签中的变量。

文件视图:

1.1.1.1 host red  70%     /
1.1.1.1 host green        0%      /dev/shm
1.1.1.1 host green        63%     /staging/om_campaign_files
1.1.1.1 host red  71%     /mnt/OBCDir

导出变量后的预期视图:

<tr><td>1.1.1.1<td/><td>host<td/><td color=red>/mnt/OBCDir<td/></tr>
4

4 回答 4

3

如果您正在寻找程序中可用的东西,而不是命令提示符下的单行:

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

while (my $line = <DATA>) {
  chomp $line;
  my ($ip, $hostname, $color, undef, $mount) = split ' ', $line;
  say "<tr><td>$ip</td><td>$hostname</td><td color=$color>$mount</td></tr>";
}

__DATA__
1.1.1.1 host red  70%     /
1.1.1.1 host green        0%      /dev/shm
1.1.1.1 host green        63%     /staging/om_campaign_files
1.1.1.1 host red  71%     /mnt/OBCDir

输出:

<tr><td>1.1.1.1</td><td>host</td><td color=red>/</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=green>/dev/shm</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=green>/staging/om_campaign_files</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=red>/mnt/OBCDir</td></tr>
于 2013-05-24T12:53:54.807 回答
1
perl -anE 'say "<tr><td>$F[0]<td/><td>$F[1]<td/><td color=$F[2]>$F[4]<td/></tr>"' file
于 2013-05-24T12:43:20.553 回答
1

只需根据awk需要插入每个字段:

awk '{print "<tr><td>"$1"</td><td>"$2"</td><td color="$3">"$5"</td></tr>"}' file
<tr><td>1.1.1.1</td><td>host</td><td color=red>/</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=green>/dev/shm</td></tr>
...

注意:还修复了一些结束标签<td/>,即</td>.

于 2013-05-24T12:38:30.647 回答
1

一个纯粹的bash解决方案。我假设输出是由一些外部实用程序生成的。此外部实用程序由cat infile(请参阅coproc)模拟。除了调用外部实用程序外,没有额外的分叉。

coproc cat infile
while read -u ${COPROC[0]} i j k l m; do
  echo "<tr><td>$i<td/><td>$j<td/><td color=$k>$m</td></tr>"
done

该程序在后台启动一个 proc。它stdout被重定向到存储在 ${COPROC[0]} 中的文件句柄。此句柄在 while 循环中读取。

或者没有coproc(注意和之间的空格<<():

while read i j k l m; do
  echo "<tr><td>$i<td/><td>$j<td/><td color=$k>$m</td></tr>"
done < <(cat infile)

如果输入在文件中,则可以像这样使用

while read i j k l m; do
  echo "<tr><td>$i<td/><td>$j<td/><td color=$k>$m</td></tr>"
done <infile
于 2013-05-24T14:53:10.970 回答