想要將目錄的檔案,快速製作 HTML 的 a link,使用 Shell script 可以搭配 sed 或 awk 來達成
標籤: awk
Linux AWK 欄位空白就移除此行
下述欄位使用 Tab 分隔:(ID=2 的 Title 那欄位是空的)
ID | Title | Content |
1 | AAA | C-AAA |
2 | C-BBB | |
3 | CCC | C-CCC |
上述若某個欄位為空,就要移除那整列,要怎麼做呢?
AWK、CUT 移除第一欄 印出後面所有值
AWK 抓「某特定行數」的值
於 Linux 使用 awk 要拉第42行的資料,要怎麼做?
- cat filename | awk 'NR==42{print $0; exit}'
AWK 判斷有符合的 字串 或 條件 再印出資料
Linux 要垂直抓資料,經常使用 awk,但是想要判斷某個欄位符合條件後,才把資料印出來,可以怎麼做呢?
使用 AWK 解析 Key-Value 傳入陣列
想把 Shell 環境變數抓進 AWK 的 Array,可以怎麼做呢?
Bash shell 要如何印出 01、02、03..
Bash shell script 要印出 01、02、03.. 格式化的數字,可以怎麼做呢?
Shell script 依照空格分隔 每行一個字
Shell script 可以使用 tr / sed 來完成~ 如果還要某個特定欄位來做,可以在搭配 cut 或 awk~
使用 AWK 過濾不要的欄位
Linux 使用 AWK 來垂直取得資料,例如:
- $ cat access.log | awk '{print $1, $2}'
但是反過來,想要過濾掉某些欄位,剩下的全部印出來,該怎麼做呢?
AWK 取得欄位的「最後」與「倒數第二個值」的方法
使用 AWK Parse access.log,在某些特定條件會發生抓錯欄位的情況(若使用 空白 切割,沒使用 " 搭配切割,就容易抓錯欄位)
不過經常快速處理,都是使用空白切割即可,那要抓最後的欄位,比較簡單的方式就是一樣「空白切割」或「" 切割」,只是資料抓法是從後面往前抓。
- AWK 要取得最後一個欄位的值是使用: $NF
- AWK 要取得倒數第二個欄位的值是使用: $(NF-1)
- 由後往前取,就繼續 -2、-3... 下去即可
- 範例:awk '{print $(NF - 2)}' # 從後面數來第二個
所以要抓 access.log 倒數第二欄 和 第二欄,範例如下:
- cat access.log | awk -F\" '{print $(NF-2),$2}' # 使用 " 切割
想抓超過 500ms 的網址(註:elapsed 並不是預設就有,需要另外加上)
- cat access.log | awk -F\" '{print $NF,$2}' | awk '{print $1,$3}' | sed 's/elapsed=//' | sed 's/us//' | awk '{if ($1 > 500000) {print $1, $2}}'
- cat access.log | awk -F\" '{print $(NF-2),$2}' | awk '{print $1,$3}' | sed 's/elapsed=//' | sed 's/us / /' | awk '{if ($1 > 500000) {print $1, $2}}'