
ログファイルから交通ハブと接続に関するデータを抽出したいと思います。ログの例:
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
Stage Suffix for Offset Optimizer 1
Double Cycle Initially ? N Force Single / Double Cycling status ? N
Double Cycle Group 00 Double Cycle Ignore ? N
Allow Link Max Saturation N Link Max Sat Override N
Stages 1 2 3 4
Fixed N N N Y
LRT stage N N N N
Skip allowed N N N N
Ped stage N N N N
Ped invite N N N N
Ghost stage N N N N
Offset authority pointer 0 Split authority pointer 0
Offset opt emiss weight 000 I/green feedback inhibit N
Bus Authority 00 ACIS node 00000
Bus Mode - Central extensions N Local extensions N Recalls N
Stage skipping N Stage truncation N Cancels N
Bus Priority Selection - Multiple buses N Queue Calculation N
Hold recall if faulty N Disable recall N Disable long jtim N Real Cancel N
Bus recall recovery type 0 Bus extension recovery type 0
Offset Bus authority pointer 0 Split Bus authority pointer 0
Bus skip recovery 0 Skip importance factor 0
Bus priority status OFF
LRT sat 1 000 LRT sat 2 000 LRT sat 3 000
PEDESTRIAN FACILITIES
Ped Node N Num Ped Wait Imp Factor 000
Ped Priority 0 Max Ped Priority Freq 00
Ped Lower Sat Threshold 000 Ped Upper Sat Threshold 000
Max Ped Wait Time 000
PEDESTRIAN VARIABLE INVITATION TO CROSS
Allow Ped Invite N Ped Priority Auto 000
Ped Invite Upper Sat 000 Prio Level 1 2 3 4
Max Ped Priority Smoothed Time 000 000 000 000
Max Ped Priority Increase Length 00 00 00 00
CYCLE TIME FACILITIES
Allow Node Independence N Operator Node Independence 0
Ghost Demand Stage N Num Ghost Assessment Cycles 15
Upper Trigger Ghost 04 Lower Trigger Ghost 0
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
Stage Suffix for Offset Optimizer 1
Double Cycle Initially ? N Force Single / Double Cycling status ? N
Double Cycle Group 00 Double Cycle Ignore ? N
Allow Link Max Saturation N Link Max Sat Override N
Stages 1 2 3
Fixed N Y Y
LRT stage N N N
Skip allowed N N N
Ped stage N N N
Ped invite N N N
Ghost stage N N N
Offset authority pointer 0 Split authority pointer 0
Offset opt emiss weight 000 I/green feedback inhibit N
Bus Authority 00 ACIS node 00000
Bus Mode - Central extensions N Local extensions N Recalls N
Stage skipping N Stage truncation N Cancels N
Bus Priority Selection - Multiple buses N Queue Calculation N
Hold recall if faulty N Disable recall N Disable long jtim N Real Cancel N
Bus recall recovery type 0 Bus extension recovery type 0
Offset Bus authority pointer 0 Split Bus authority pointer 0
Bus skip recovery 0 Skip importance factor 0
Bus priority status OFF
LRT sat 1 000 LRT sat 2 000 LRT sat 3 000
PEDESTRIAN FACILITIES
Ped Node N Num Ped Wait Imp Factor 000
Ped Priority 0 Max Ped Priority Freq 00
Ped Lower Sat Threshold 000 Ped Upper Sat Threshold 000
Max Ped Wait Time 000
PEDESTRIAN VARIABLE INVITATION TO CROSS
Allow Ped Invite N Ped Priority Auto 000
Ped Invite Upper Sat 000 Prio Level 1 2 3 4
Max Ped Priority Smoothed Time 000 000 000 000
Max Ped Priority Increase Length 00 00 00 00
CYCLE TIME FACILITIES
Allow Node Independence N Operator Node Independence 0
Ghost Demand Stage N Num Ghost Assessment Cycles 15
Upper Trigger Ghost 04 Lower Trigger Ghost 0
次のBashスクリプトを使用して、最初の関連行をすでに抽出できます。
grep SCN* LOG.TXT > JUNCTIONS.txt
以下のように、すべての接続ポイントのリストが作成されます。
SCN DD1251 At Glasgow Road - Kilbowie Road
SCN DD1271 At Glasgow Road - Hume Street
SCN DD1301 At Glasgow Road - Argyll Road - Cart Street
SCN DD1351 At Kilbowie Road - Chalmers Street
...
ただし、各リンクヘッダの直後に多くのスペースが発生する前に、ノードの最後のリンクまで行を抽出し、次のリンクまでステップサフィックスから始めて何もキャプチャしないようにします。
一致する各インスタンスが見つかった後に追加の行数を含めるようにBASHスクリプトを変更する方法はありますか?
答え1
これはあなたが望むものですか?
sed -n '/^SCN/,/^\s*$/p' LOG.TXT
2つのパターン間の行(およびそれを含む行)を印刷します。
- 行の先頭に「SCN」が表示されます(
^SCN
)。 - ゼロ個以上の空白文字を含む空行(
^\s*$
)
そして以下を出力します。
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
答え2
あなたの例では、awk
次のプログラムを考えることができます。
awk '/^SCN/{f=1} !NF{f=0} f' LOG.TXT > JUNCTIONS.TXT
これは
- 行開始
f
時のフラグの設定1
SCN
- 空行が見つかった場合はフラグをリセットします
0
(この場合、文字がまったく存在しない代わりにテキストフィールドが見つからないという条件を課し、「視覚的に空白」行を許可します)。 - フラグが次の場合にのみ現在行を印刷します。
1
少し簡単です。明示的なフラグの代わりにアドレス範囲を使用してください。
awk '/^SCN/,/^[[:space:]]*$/' LOG.TXT > JUNCTIONS.TXT
例の出力は次のとおりです。
SCN DD1251 At Glasgow Road - Kilbowie Road
Modified By ________
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1271 C DD1271 R
DD1351 D DD1351 B
E
SCN DD1271 At Glasgow Road - Hume Street
Modified 13-OCT-15 15:06 By BDAVIDSON
Type CR
Region WS Subregion
UPSTREAM DOWNSTREAM FILTER
NODE LINK NODE LINK LINK
DD1301 T DD1301 A
DD1251 R DD1251 C
最初の例では、空白行を区切って印刷しません。