다음 형식의 파일이 있고 그 값을 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 필드의 처음 두 부분이 두 줄을 결합하는 핵심이고 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
재미있게 보내세요!