次の形式のファイルがあり、その値を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**
このファイルから値(ASCIIとRPI)を取得してSTATIC HTMLタグに渡すにはどうすればよいですか?以下に値(ASCIIとRPI)を含めたいHTMLマークアップがあります。
<!--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>
必要な出力は以下の通りです。
<!--Row 1 Values -->
<tr>
<td class="ValueCell">ASCII</td>
<td class="ValueCell">RPI</td>
ファイル内で、それぞれASCII値とRPI値を持つファイルの1行目の[ABC_Structure_Type]と[Current_To]の値で置き換える必要があります。
答え1
まあ、実際に何をしたいのかはわかりませんが、ファイルから値を解析する必要があることは明らかです。これを行うには、値を次のように別の配列に入れるだけです(値を含む実際のファイルにYourFileを設定する必要があります)。
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/.*=\(.*\)\*\*$/\1/' )")
done < "$YourFile"
配列が正しく入力されていることを確認するには、次の手順を実行します。
printf "%s\n" "${H[@]}"
printf "%s\n" "${V[@]}"
静的HTMLページのスタブを作成したい場合は、上記のprintfsを編集したり、値で別の操作をしたい場合は、単純なループを使用して簡単に実行できます。
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
例の値の出力は次のとおりです。
<td class=HeaderCell>ABC_Structure_Type</td>
<td class=HeaderCell>Current_To</td>
<td class=ValueCell>ASCII</td>
<td class=ValueCell>RPI</td>
もちろん、この値で何をしたいのか(printfsだけでなく)できます。
免責事項:GNU / bashスクリプト...
答え2
さて、a)idフィールドの最初の2つの部分が2つの行を結合するコアであり、b)コマンドラインでperlを使用することができると仮定すると、次のスクリプトは値フィールドを解析して変換します。指定された入力ファイルのhtml出力:
#!/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);
使用法:
$> perl script.pl inputfile.txt
楽しくお過ごしください!