grep文件并在循环中导出变量

时间:2013-05-24 12:33:20

标签: perl bash awk grep

想要grep文件并将行像分离的vars一样导出,将最后两行导出为一个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 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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>

答案 2 :(得分:1)

perl -anE 'say "<tr><td>$F[0]<td/><td>$F[1]<td/><td color=$F[2]>$F[4]<td/></tr>"' file

答案 3 :(得分: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
相关问题