iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
AI/ ML & Data

使用 jq 處理資料系列 第 19

Day19: jq 的 if-then-else-end

  • 分享至 

  • xImage
  •  

這次山陀兒颱風位置特殊,又幾乎滯留,在家防颱注意安全~ 繼續使用颱風的資料做練習吧

https://ithelp.ithome.com.tw/upload/images/20241003/20078389ZaC5SCgwd1.png

對話中學習

徒弟:師傅,如果我 .movingDirection 希望用中文字和箭頭顯示,可以怎麼做呢?

師傅:用 if-then-else 結構。

徒弟:哦,是像我們之前學的那樣嗎?可以給我一個例子嗎?

師傅:看這個:

.movingDirection | if . == "N" then "北 ↑"
elif . == "S" then "南 ↓"
elif . == "E" then "東 →"
elif . == "W" then "西 ←"
else . end

徒弟:我明白了。這樣就可以把 E,W,S,N 轉換成中文和箭頭了。但如果是複合方向呢?

師傅:很好的問題。試著完成更多的方向。

徒弟:讓我試試...是不是這樣:

.movingDirection | if . == "N" then "北 ↑"
elif . == "S" then "南 ↓"
elif . == "E" then "東 →"
elif . == "W" then "西 ←"
elif . == "NE" then "東北 ↗"
elif . == "SE" then "東南 ↘"
elif . == "SW" then "西南 ↙"
elif . == "NW" then "西北 ↖"
else . end

師傅:很好。還有 "NNE" 這種三個組合的,可以自己試試。

jq 的 if-then-else-end

jq 的 if-then-else-end 用法,就是我們熟悉的 "如果 (條件1) 成立,那就 A ;否則就 B 結束",有多個條件的時候,使用 elif。需要注意的條件式裡的輸入的資料,如果輸入單純是字串,可以用 . 恆等運算子;如果是物件的時候,就要使用 .foo 物件屬性識別索引。

https://ithelp.ithome.com.tw/upload/images/20241003/20078389j663fam4m0.png

修改 .movingDirection 的顯示

認識 if-then-else-end 用法之後,我們就可以修改颱風消息中,.movingDirection欄位的顯示結果,如下:

(.movingDirection | if . == \"N\" then \"北 ↑\" elif . == \"S\" then \"南 ↓\" elif . == \"E\" then \"東 →\" elif . == \"W\" then \"西 ←\" else . end)

修改前後對照結果如下:

修改前 https://ithelp.ithome.com.tw/upload/images/20241003/20078389Vhno2aIlId.png
修改後 https://ithelp.ithome.com.tw/upload/images/20241003/20078389GcqudjvVXp.png

用中文和箭頭標示方向,有沒有比較親切呢?

結論

今天我們認識了 jq 的 if-then-else-end 用法,用法和其他語言差異不大,簡單實用。今天的修改可以可參考 原始碼

不過...我們的主程式是不是有點長? 接下來可以來點...重構。😁

颱風天請注意安全~


上一篇
Day18: 練習用 jq 追颱風消息 - @tsv
下一篇
Day20: jq 的變數
系列文
使用 jq 處理資料30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言