Grep файлаў і экспарт Вары у цыкле

Хочаце Grep файл і экспартаваць радок як аддзеленых зменных і двух апошніх, каб быць у адной вар. Пасля гэтага, каб стварыць цыкл і экспартаваць Вар ў 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>
1

8 адказы

Калі вы шукаеце нешта карыснае ў праграме, а не однострочник ў камандным радку:

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

while (my $line = ) {
  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>
3
дададзена

Калі вы шукаеце нешта карыснае ў праграме, а не однострочник ў камандным радку:

#!/usr/bin/env perl    

use strict;
use warnings;
use 5.010;

while (my $line = ) {
  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>
3
дададзена
perl -anE 'say "<tr><td>$F[0]<td/><td>$F[1]<td/><td color=$F[2]>$F[4]<td/></tr>"' file
1
дададзена
perl -anE 'say "<tr><td>$F[0]<td/><td>$F[1]<td/><td color=$F[2]>$F[4]<td/></tr>"' file
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>
...

Note: also fixed some of the closing tags i.e. <td/> to </td>.

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>
...

Note: also fixed some of the closing tags i.e. <td/> to </td>.

1
дададзена

Чысты баш рашэнне. Я мяркую, выхад спараджаецца некаторай знешняй карыснасці. Гэта вонкавая ўтыліта мадэлюецца кошка входной_файл (гл 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

Гэтая праграма запуску карысць у фонавым рэжыме. Яго стандартны вывад перанакіроўваецца на дэскрыптар файла, які захоўваецца ў $ {COPROC [0]}. Гэтая ручка чытання ў той час як пятля.

Or without coproc (mind the space between < and <(!):

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 
1
дададзена

Чысты баш рашэнне. Я мяркую, выхад спараджаецца некаторай знешняй карыснасці. Гэта вонкавая ўтыліта мадэлюецца кошка входной_файл (гл 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

Гэтая праграма запуску карысць у фонавым рэжыме. Яго стандартны вывад перанакіроўваецца на дэскрыптар файла, які захоўваецца ў $ {COPROC [0]}. Гэтая ручка чытання ў той час як пятля.

Or without coproc (mind the space between < and <(!):

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 
1
дададзена