91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Unix中awk命令怎么用

發布時間:2021-10-21 16:01:56 來源:億速云 閱讀:238 作者:小新 欄目:系統運維

小編給大家分享一下Unix中awk命令怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

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

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

提取數據列

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

$ echo one two three four five | awk ‘{print $4}’four$ who | awk ‘{print $1}’jdoefhenry

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

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

$ awk '{print $1,$5,$NF}' HelenKellerQuoteThe 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。最后的句號也包含進去了,因為它是最后一個字符串的一部分。

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

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

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

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

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

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

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

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

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

打印簡單文本

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

$ awk 'BEGIN {print "Hello, World" }'Hello, World

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

$ who | awk 'BEGIN {print "Current logins:"} {print $1}'Current logins:shsnemo

指定字段分隔符

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

$ cat testfilea:b:c,d:e$ awk -F : '{print $2,$3}' testfileb c,d

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

$ awk -F: '{print $1}' /etc/passwd | head -11rootdaemonbinsyssyncgamesmanlpmailnewsuucp

篩選內容

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

$ awk -F":" ' $3 >= 1000 ' /etc/passwdnobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologinshs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bashnemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zshdory:x:1002:1002:Dory,,,:/home/dory:/bin/bash...

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

$ awk -F":" 'BEGIN {print "user accounts:"} $3 >= 1000 ' /etc/passwduser accounts:nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologinshs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bashnemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zshdory:x:1002:1002:Dory,,,:/home/dory:/bin/bash

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

$ awk -F":" 'BEGIN {print "user accounts\n============="} $3 >= 1000 ' /etc/passwduser accounts=============nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologinshs:x:1000:1000:Sandra Henry-Stocker,,,:/home/shs:/bin/bashnemo:x:1001:1001:Nemo,,,:/home/nemo:/usr/bin/zshdory:x:1002:1002:Dory,,,:/home/dory:/bin/bash

在 awk 中進行數學計算

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

這里有一對例子:

$ awk 'BEGIN {print sqrt(2019)}'44.9333$ awk 'BEGIN {print log(2019)}'7.61036

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

awk 腳本

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

#!/usr/bin/awk -f # 這一行是注釋 BEGIN {    printf "%s\n","User accounts:"    print "=============="    FS=":"    n=0} # 現在開始遍歷數據{    if ($3 >= 1000) {        print $1        n ++    }} END {    print "=============="    print n " accounts"}

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

以上是“Unix中awk命令怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

驻马店市| 邓州市| 西青区| 江孜县| 宕昌县| 和平区| 宁南县| 五寨县| 黑水县| 新竹县| 黄梅县| 沅陵县| 北川| 徐水县| 东方市| 平定县| 潮州市| 营山县| 赫章县| 清河县| 嘉荫县| 庄河市| 喀喇| 腾冲县| 天等县| 会同县| 滨州市| 金溪县| 兴安盟| 镇宁| 原阳县| 土默特右旗| 余姚市| 普陀区| 托克逊县| 高要市| 高邑县| 南澳县| 柳林县| 沅江市| 宿松县|