Pesquise o valor de um arquivo dinâmico e passe para uma variável em HTML [closed]

0

Eu tenho o seguinte arquivo abaixo com o formato e quero passar o valor para HTML

BE64533-A0E1-4F98-A91F-02C1D0 column=ABC_Received:ABC_Structure_Type, timestamp=1439978656596, **value=ASCII**
BE64533-A0E1-4F8-A9F-03CE2C1D0 column=ABC_Received:Current_To, timestamp=1439978656596, **value=RPI** 

Como obtenho o valor (ASCII e RPI) deste arquivo e passo para as tags HTML STATIC. Eu tenho tag HTML abaixo como onde eu quero colocar esse valor (ASCII e RPI)

<!--Row 1 Header -->
<tr>
<td class="HeaderCell">ABC_Structure_Type</td>
<td class="HeaderCell">Current_To</td>


<!--Row 1 Values -->
<tr>
<td  class="ValueCell">[ABC_Structure_Type]</td>
<td  class="ValueCell">[_Current_To]</td>

A saída necessária é mostrada abaixo

<!--Row 1 Values -->
<tr>
<td  class="ValueCell">ASCII</td>
<td  class="ValueCell">RPI</td>

Do arquivo, Eles precisam ser substituídos nos valores da linha 1 [ABC_Structure_Type] e [Current_To] do arquivo que tem valor como ASCII e RPI respectivamente

    
por Gokul 19.08.2015 / 14:57

2 respostas

2

Bem, não está claro o que você realmente quer fazer, mas está claro que você precisa analisar esses valores fora do seu arquivo. Para fazer isso, basta colocar os valores em matrizes separadas, assim (você precisa definir YourFile com o arquivo real com os valores):

H=()
V=()
while read -r Line; do 
  H+=("$( printf "%s" "$Line" | grep -o 'column=[^,]*' | sed 's/^column=ABC_Received://')" )
  V+=("$( printf "%s" "$Line" | grep -o ' \*\*value=.*\*\*$' | sed 's/.*=\(.*\)\*\*$//' )")
done < "$YourFile"

Para verificar se as matrizes estão preenchidas corretamente, basta executar

printf "%s\n" "${H[@]}"
printf "%s\n" "${V[@]}"

Se você quer apenas criar um stub para uma página HTML estática, você pode fazê-lo agora facilmente, se você editar os printfs acima ou com um loop fácil (se você quiser fazer algo diferente com os valores):

for v in "${H[@]}"; do 
  printf '<td class="HeaderCell">%s</td>\n' "$v"
done

for v in "${V[@]}"; do 
  printf '<td class="ValueCell">%s</td>\n' "$v"
done

A saída com seus valores de exemplo seria:

<td class=HeaderCell>ABC_Structure_Type</td>
<td class=HeaderCell>Current_To</td>
<td class=ValueCell>ASCII</td>
<td class=ValueCell>RPI</td>

Claro, agora você pode fazer o que quiser com esses valores (não apenas printfs). Espero que isso ajude.

Aviso: script GNU / bash…

    
por 19.08.2015 / 16:26
1

Bem, supondo que a) as duas primeiras partes do campo id são a chave para agrupar duas linhas juntas, e b) você também pode usar o perl a partir da linha de comando, o seguinte script irá analisar os valores - campos, e convertê-lo em uma saída html de um determinado arquivo de entrada:

#!/usr/bin/perl
my $fn=shift;
my ($ABC_found,$ASCII,$RPI,$ID)=(0,"","","");
open(FIN,"<",$fn) || die ("cannot open infile $fn");
sub print_html {
    $asc = shift;
    $rpi = shift;
print("
<html><body>
<!--Row 1 Header -->
<tr>
<td class='HeaderCell'>ABC_Structure_Type</td>
<td class='HeaderCell'>Current_To</td>
<!--Row 1 Values -->
<tr>
<td  class='ValueCell'>$asc</td>
<td  class='ValueCell'>$rpi</td>
</body></html>");
}

while (<FIN>) {
    if ($ABC_found==0 && m/^([\w\d]*)[\-]([\w\d]*).*ABC_Structure.*,        [\s]timestamp=.*,[\s]value=(.*)$/) {
        # print("ASCII : [$1]-[$2] : [$3]\n");
        $ABC_found=1;
        $ID="$1-$2";
        $ASCII=$3
    } elsif ($ABC_found==1 && m/^$ID.*Current_To.*[\s]timestamp=.*,[\s]value=(.*)$/) {
        $ABC_found=0;
        # print("RPI : [$1]\n");
        $RPI=$1;
        print_html($ASCII,$RPI);
    } else {    
        $ABC_found=0;
    }
}
close(FIN);

Uso:

$> perl script.pl inputfile.txt

Divirta-se!

    
por 19.08.2015 / 17:31