成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

帶你了解千面得awk命令

系統 Linux
awk 命令不僅提供了簡單的輸入字符串篩選功能,還包含提取數據列、打印簡單文本、篩選內容——甚至做一些數學計算。

[[285044]]

awk 命令不僅提供了簡單的輸入字符串篩選功能,還包含提取數據列、打印簡單文本、篩選內容——甚至做一些數學計算。

如果你僅使用 awk 選取一行中的特定文本,那么你可能錯過了它的很多功能。在這篇文章中,我們會來看看使用 awk 可以幫你做一些其他的什么事情,并提供一些例子。

提取數據列

awk 所提供的最簡單與最常用的功能便是從文件或管道傳輸的數據中選取特定的內容。默認使用空格當做分隔符,這非常簡單。

  1. $ echo one two three four five | awk ‘{print $4}’
  2. four
  3. $ who | awk ‘{print $1}’
  4. jdoe
  5. fhenry

空格指的是一系列的 spacetab 字符。在下面所展示的命令里,awk 從提供的數據中篩選第一和第四項。

awk 命令也可以通過在其后增加文件名參數的方式從文本文件中獲取數據。

  1. $ awk '{print $1,$5,$NF}' HelenKellerQuote
  2. The beautiful heart.

(LCTT 譯注:“The best and most beautiful things in the world can not be seen or even touched , they must be felt with heart.” ——海倫凱勒)

在這個例子中,awk 挑選了一行中的第一個、第五個和最后一個字段。

命令中的 $NF 指定選取每行的最后一個字段。這是因為 NF 代表一行中的字段數量Number of Field,也就是 23,而 $NF 就代表著那個字段的值,也就是heart。最后的句號也包含進去了,因為它是最后一個字符串的一部分。

字段能以任何有用的形式打印。在這個例子中,我們將字段以日期的格式進行打印輸出。

  1. $ date | awk '{print $4,$3,$2}'
  2. 2019 Nov 22

如果你省略了 awk 命令中字段指示符之間的逗號,輸出將會擠成一個字符串。

  1. $ date | awk '{print $4 $3 $2}'
  2. 2019Nov21

如果你將通常使用的逗號替換為連字符,awk 就會嘗試將兩個字段的值相減——或許這并不是你想要的。它不會將連字符插入到輸出結果中。相反地,它對輸出做了一些數學計算。

  1. $ date | awk '{print $4-$3-$2}'
  2. 1997

在這個例子中,它將年 “2019” 和日期 “22” 相減,并忽略了中間的 “Nov”。

如果你想要空格之外的字符作為輸出分隔符,你可以通過 OFS輸出分隔符output field separator)指定分隔符,就像這樣:

  1. $ date | awk '{OFS="-"; print $4,$3,$2}'
  2. 2019-Nov-22

打印簡單文本

你也可以使用 awk 簡單地顯示一些文本。當然了,比起 awk 你可能更想使用 echo 命令。但換句話說,作為 awk 腳本的一部分,打印某些相關性文本將會非常實用。這里有一個沒什么用的例子:

  1. $ awk 'BEGIN {print "Hello, World" }'
  2. Hello, World

下面的例子更加合理,添加一行文本標簽來更好的辨識數據。

  1. $ who | awk 'BEGIN {print "Current logins:"} {print $1}'
  2. Current logins:
  3. shs
  4. nemo

指定字段分隔符

不是所有的輸入都以空格作為分隔符的。如果你的文本通過其它的字符作為分隔符(例如:逗號、冒號、分號),你可以通過 -F 選項(輸入分隔符)告訴 awk

  1. $ cat testfile
  2. a:b:c,d:e
  3. $ awk -F : '{print $2,$3}' testfile
  4. b c,d

下面是一個更加有用的例子——從冒號分隔的 /etc/passwd 文件中獲取數據:

  1. $ awk -F: '{print $1}' /etc/passwd | head -11
  2. root
  3. daemon
  4. bin
  5. sys
  6. sync
  7. games
  8. man
  9. lp
  10. mail
  11. news
  12. uucp

篩選內容

你也可以使用 awk 命令評估字段。例如你僅僅想列出 /etc/passwd 中的用戶賬號,就可以對第三個字段做一些篩選。下面的例子中我們只關注大于等于 1000 的 UID:

  1. $ awk -F":" ' $3 >= 1000 ' /etc/passwd
  2. nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
  3. shs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bash
  4. nemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zsh
  5. dory:x:1002:1002:Dory,,,:/home/dory:/bin/bash
  6. ...

如果你想為輸出增加標題,可以添加 BEGIN 從句:

  1. $ awk -F":" 'BEGIN {print "user accounts:"} $3 >= 1000 ' /etc/passwd
  2. user accounts:
  3. nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
  4. shs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bash
  5. nemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zsh
  6. dory:x:1002:1002:Dory,,,:/home/dory:/bin/bash

如果你想要不止一行的標題,你可以通過 "\n" 分隔輸出:

  1. $ awk -F":" 'BEGIN {print "user accounts\n============="} $3 >= 1000 ' /etc/passwd
  2. user accounts
  3. =============
  4. nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
  5. shs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bash
  6. nemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zsh
  7. dory:x:1002:1002:Dory,,,:/home/dory:/bin/bash

在 awk 中進行數學計算

awk 提供了驚人的數學計算能力,并且可以開平方,算 log,算 tan 等等。

這里有一對例子:

  1. $ awk 'BEGIN {print sqrt(2019)}'
  2. 44.9333
  3. $ awk 'BEGIN {print log(2019)}'
  4. 7.61036

想要詳細了解 awk 的數學計算能力,可以看《使用 awk 進行數學計算》這篇文章。

awk 腳本

你也可以使用 awk 寫一套單獨的腳本。下面的例子模仿了之前寫過的一個,不過還計算了系統里賬戶的數量。

  1. #!/usr/bin/awk -f
  2.  
  3. # 這一行是注釋
  4.  
  5. BEGIN {
  6. printf "%s\n","User accounts:"
  7. print "=============="
  8. FS=":"
  9. n=0
  10. }
  11.  
  12. # 現在開始遍歷數據
  13. {
  14. if ($3 >= 1000) {
  15. print $1
  16. n ++
  17. }
  18. }
  19.  
  20. END {
  21. print "=============="
  22. print n " accounts"
  23. }

注意 BEGIN 那一節是如何提供標題、指定字段分隔符和初始化計數器的,它僅在腳本初始化時期執行。這個腳本也包含 END 節,它僅在中間所有命令處理完成之后運行,顯示了所有中間小節所篩選數據的最終行數(第三個字段大于等于 1000)。

作為一個長存于 Unix 之上的命令,awk 依舊提供著非常有用的服務,這也是我幾十年前愛上 Unix 的原因之一。 

責任編輯:龐桂玉 來源: Linux中國
相關推薦

2018-07-05 08:30:54

Python命令行工具shell

2022-09-26 11:30:40

MQTT協議客戶端協議

2019-09-27 09:40:06

ElvishShellLinux

2010-07-05 16:20:32

NetBEUI協議

2015-04-15 10:53:40

大數據京東千人千面

2018-04-17 09:20:35

Linux命令crypt

2017-03-10 11:35:16

Linuxsort命令

2020-12-31 12:16:49

SAP云計算SAP產品

2021-02-03 16:22:43

新基建SAP

2017-08-24 09:55:57

2021-05-31 14:22:56

物聯網物聯網安全

2010-09-02 16:59:35

資源預留協議

2021-12-10 10:29:07

在線客服系統

2019-11-05 10:18:04

RPM包RPMLinux

2018-03-01 16:25:52

Linux內核內存管理

2023-11-20 08:18:49

Netty服務器

2019-03-26 10:50:22

Python面向對象編程語言

2019-04-24 15:20:44

Shell腳本編程Linux

2018-03-12 10:15:10

前端Javascript反調試

2023-01-06 19:19:16

TensorFlow
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本中文在线视频 | 本道综合精品 | 嫩草黄色影院 | 国产精品久久久久久久久久久久久久 | 四虎影院新地址 | 一区二区三区免费 | 视频一区二区三区中文字幕 | 一区二区精品电影 | 国产精品一区一区 | 欧美888 | 亚洲天堂久久新 | 精品1区2区| 国产永久免费 | 亚洲精品一区国产精品 | 天天操天天射综合 | 久久久国| 狠狠av| 成人精品国产免费网站 | 久久久www成人免费无遮挡大片 | 999久久久久久久久6666 | 国产精品一区二区三区四区五区 | 国产精品久久777777 | 国产一区二区三区免费观看视频 | 国产剧情一区 | 在线视频h | 亚洲国产高清免费 | 在线观看www视频 | 国产精品爱久久久久久久 | 久久精品国产亚洲 | 成在线人视频免费视频 | 黄色操视频 | 卡通动漫第一页 | 午夜精品影院 | 欧美一区二区久久 | 天堂视频中文在线 | 国产91丝袜在线18 | 视频一区二区中文字幕 | 91影视 | 粉嫩一区二区三区四区公司1 | 激情欧美一区二区三区 | 毛片网在线观看 |