iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

30天菜鳥學 Linux 系列 第 12

12天-學習 awk 處理文本文件神器 part 1

  • 分享至 

  • xImage
  •  

今天進度 : 鳥哥的 Linux 私房菜 -- 第 4 堂課:Linux 基礎檔案權限與基礎帳號管理


另外今天追蹤的 一級屠豬士 大神解答此問題 請問用 Regex 如何刪除行數是偶數的? 使用 awk 解析文字的技巧,先來研究這個。

先上阮一峰老師的評價,來源 awk 入门教程 - 阮一峰的网络日志

awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序。
它依次处理文件的每一行,并读取里面的每一个字段。对于日志、CSV 那样的每行格式相同的文本文件,awk可能是最方便的工具。

應用1 : 可以跟其他 linux 指令很好的對接
舉例 : 原本ping指令長這樣

test@test:~$ ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=0.410 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=0.421 ms (DUP!)
64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=0.383 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=63 time=0.393 ms (DUP!)

現在可以跟 awk 做結合,增加顯示時間點

test@test:~$ ping 192.168.1.1 | awk '{ print $0"\t" strftime("%Y:%m:%d-%H:%M:%S",systime()) fflush() } '>ping.log
test@test:~$ vi ping.log

PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.    2020:09:15-06:21:050
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=0.390 ms      2020:09:15-06:21:050
64 bytes from 192.168.1.1: icmp_seq=1 ttl=63 time=0.401 ms (DUP!)       2020:09:15-06:21:050

應用2 : 抓取對應第N欄資料
舉例 : 登入帳號紀錄如下

test@test:~$ last
test     pts/0        172.25.48.1      Mon Sep 14 08:38   still logged in
test     pts/2        172.25.48.1      Mon Sep 14 03:32   still logged in
test     pts/1        172.25.48.1      Mon Sep 14 03:31   still logged in
test     pts/1        172.25.48.1      Mon Sep 14 03:22 - 03:31  (00:08)
test     pts/0        172.25.48.1      Mon Sep 14 03:00 - 03:39  (00:39)
test     pts/0        172.25.48.1      Mon Sep 14 02:11 - 02:50  (00:38)
test     pts/0        172.20.80.1      Sun Sep 13 11:34 - 17:02  (05:27)
test     pts/0        172.20.80.1      Sun Sep 13 11:33 - 11:33  (00:00)
test     tty1                          Sun Sep 13 10:53    gone - no logout
reboot   system boot  5.4.0-47-generic Sun Sep 13 10:53   still running
test     pts/1        172.20.80.1      Wed Sep  9 08:39 - 11:52 (2+03:12)
test     pts/0        172.20.80.1      Wed Sep  9 07:04 - 08:45  (01:40)
reboot   system boot  5.4.0-47-generic Wed Sep  9 03:06   still running
reboot   system boot  5.4.0-47-generic Wed Sep  9 03:04   still running
test     tty1                          Wed Sep  9 03:03 - crash  (00:00)
reboot   system boot  5.4.0-47-generic Wed Sep  9 03:03   still running
test     pts/0        172.20.80.1      Wed Sep  9 03:02 - crash  (00:01)
test     tty1                          Wed Sep  9 02:51 - crash  (00:12)
reboot   system boot  5.4.0-47-generic Wed Sep  9 02:50   still running

我只想要知道帳號跟方式就好

test@test:~$ last | awk  '{print $1"\t"$2}'
test	pts/0
test	pts/2
test	pts/1
test	pts/1
test	pts/0
test	pts/0
test	pts/0
test	pts/0
test	tty1
reboot	system
test	pts/1
test	pts/0
reboot	system
reboot	system
test	tty1
reboot	system
test	pts/0
test	tty1
reboot	system

上一篇
11天-搞好 Hyper-V 固定 IP , 避免浮動 IP 導致 SSH 要重設
下一篇
13天-學習 awk 處理文本文件神器 part 2
系列文
30天菜鳥學 Linux 59
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言