2015-08-15 91 views
0

我正在循環瀏覽文本文件中的站點名稱。對於文本文件中的每個站塊,我想匹配第一次出現的「添加」,並使用來自該站塊的相應傳感器和時間信息追加一條關閉語句。如果該站有第二個傳感器,我也想在使用適當傳感器和相同時間信息的第二次「添加」之後追加一個關閉語句。如果第二個傳感器不存在,它可以移動到下一個站。我希望在文本文件中的每個站塊中都遵循這種模式。我用awk和sed嘗試了一些東西,但我只能在每次出現「add」後添加close語句。任何人都可以引導我採用更合適的技術嗎?下面是該文本文件中的兩個實例站塊:awk模式匹配:循環遍歷,附加文本

sta charlie 34.07335 -106.91932 1.43 topico 
time 01/14/2015 23:05:38 
net XI SPREE 
datalogger q330 0100000EA9C2B9C3 # 2842 
sensor cmg3t 0 T3S82 
add 

sensor trillium 0 T3N04 
add 
#######Next station block############### 

sta charlie2 34.07335 -106.91932 1.43 topico2 
time 01/14/2015 23:05:38 
net XI SPREE 
datalogger q330 0100000EA9C2B9C3 # 2842 
sensor trillium 0 T3S84 
add 

sensor sts2 0 T3N04 
add 

我想代碼輸出如下:

sta charlie 34.07335 -106.91932 1.43 topico 
time 01/14/2015 23:05:38 
net XI SPREE 
datalogger q330 0100000EA9C2B9C3 # 2842 
sensor cmg3t 0 T3S82 
add 
close sensor cmg3t 01/14/2015 23:05:38 

sensor trillium 0 T3N04 
add 
close sensor trillium 01/14/2015 23:05:38 
#######Next station block############### 

sta charlie2 34.07335 -106.91932 1.43 topico2 
time 01/23/2015 17:04:22 
net XI SPREE 
datalogger q330 0100000EA9C2B9C3 # 2842 
sensor trillium 0 T3S84 
add 
close sensor trillium 01/23/2015 17:04:22 

sensor sts2 0 T3N04 
add 
close sensor sts2 01/23/2015 17:04:22 
+0

我把它縮小到只有必要的組件。我只是不想讓別人用行號寫一個解決方案,因爲其間有其他條目。感謝您考慮 – user1332577

回答

2

像這樣的事情聽起來像你想要什麼,但IDK的在你的日期如何發佈當所有的輸入都有日期1/14時,輸出變成1/23:

$ awk '/^time/{time=$2" "$3} /^sensor/{sensor=$1" "$2} {print} /^add/{print "close", sensor, time}' file 
sta charlie 34.07335 -106.91932 1.43 topico 
time 01/14/2015 23:05:38 
net XI SPREE 
datalogger q330 0100000EA9C2B9C3 # 2842 
sensor cmg3t 0 T3S82 
add 
close sensor cmg3t 01/14/2015 23:05:38 

sensor trillium 0 T3N04 
add 
close sensor trillium 01/14/2015 23:05:38 
#######Next station block############### 

sta charlie2 34.07335 -106.91932 1.43 topico2 
time 01/14/2015 23:05:38 
net XI SPREE 
datalogger q330 0100000EA9C2B9C3 # 2842 
sensor trillium 0 T3S84 
add 
close sensor trillium 01/14/2015 23:05:38 

sensor sts2 0 T3N04 
add 
close sensor sts2 01/14/2015 23:05:38 
+0

作品魅力愛德,非常感謝!我不認爲這會是一個簡單的解決方案。我對awk還是比較陌生的,我相信我理解這裏的一切,但如果你不介意解釋一下這個解決方案,那會很棒。我感謝您的幫助! – user1332577

+0

它只是保存以時間和傳感器開頭的行的信息,並將它們打印在以添加開頭的行之後。你有什麼特別的問題嗎? –

+0

因此,它需要時間值並節省2美元和3美元,然後抓住傳感器條目$ 1&$ ​​2,打印它們並在每個「添加」語句後附加它們以及「close」短語。這是否是說明它在做什麼的正確方法? – user1332577