久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

linux awk命令如何使用

250次閱讀
沒有評論

共計 3857 個字符,預計需要花費 10 分鐘才能閱讀完成。

今天丸趣 TV 小編給大家分享一下 linux awk 命令如何使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

在 linux 中,awk 命令是文本數據處理工具,適合格式化文本文件,對文本文件進行更復雜的加工處理、分析,語法“awk  [option]   pattern[action]  file …”。awk 具備強大的文本格式化能力,比如對一堆看起來沒有什么規律的日志文件,文本文件等,通過 awk 命令之后,格式化輸出為專業的可以做為應用級數據分析的樣式。

Linux 系統中有一個功能更加強大的文本數據處理工具,就是 awk。它誕生于 20 世紀 70 年代末期,這也許是它影響了眾多 Linux 用戶的原因之一。

曾有人推測 awk 命令的名字來源于 awkward 這個單詞。其實不然,此命令的設計者有 3 位,他們的姓分別是 Aho、Weingberger 和 Kernighan,awk 就取自這 3 為大師姓的首字母。

awk 具備強大的文本格式化能力,比如對一堆看起來沒有什么規律的日志文件,文本文件等,通過 awk 命令之后,格式化輸出為專業的可以做為應用級數據分析的樣式;

awk 像是一門編程語言,支持條件判斷,數組,循環等諸多的功能。

linux 三劍客

grep,擅長單純的查找或匹配文本內容;

sed,擅長文本編輯,處理匹配到的文本內容;

awk,適合格式化文本文件,對文本文件進行更復雜的加工處理、分析;

awk 理論基礎

1、awk 語法

awk [option]  pattern[action]  file ...
awk  參數   條件動作   文件 

action 是指動作,awk 擅長文本格式化,且能輸出格式化后的結果,因此最常用的動作就是 print 和 printf

2、awk 處理文本內容模式

awk 默認以空格為分隔符,且多個空格也識別為一個空格,作為分隔符;

awk 按行處理文件,一行處理完畢之后,再處理下一行;

awk 可以根據用戶指定的分隔符去工作,沒有指定,則默認為空格;

一、awk 內置變量內置變量說明 $n 指定分隔符后,當前的第 n 個列所在的字段 $0 完整的一行記錄 FS 字段分隔符,默認是空格 NF(Number of fields) 字段分隔后,當前一共多少個字段 NR(Number of records) 當前記錄數,行數

更多的內置變量,可通過 man awk 命令進行查看

簡單案例展示

提前準備一個文本,內容如下

1、輸出第二列內容

awk  {print $2}  alx.txt

2、輸出多列內容

直接在第一步后面的基礎上追加,中間用“,”分割

awk  {print $2,$3}  alx.txt

3、查看第三行內容

考察對 NR 的使用,NR 表示第 N 行記錄的模式匹配

awk  NR==3{print $0}  alx.txt

輸出多行

awk  NR==5,NR==6{print $0}  alx.txt

4、輸出從第 3 到第五行,并顯示行號

awk  NR==3,NR==5 {print NR,$0}  alx.txt

5、自定義輸出內容

某些情況下,需要給每一列添加類似于 excel 的表頭信息,就可以考慮使用 awk 的自定義輸出;

awk  {print  第一列:  $1, 第二列:  $2}  alx.txt

需要注意的是大括號外面的使用’單引號,括號里面的使用雙引號

二、awk 參數參數說明 - F 指定分隔字段符 - v 定義或修改一個 awk 內部變量 - f 從腳本文件中讀取 awk 命令

上文談到,awk 默認的字段分隔符為空格,但是像下面這樣的文本,以 # 為分隔符,就需要用到自定義分隔符;

1、顯示第一列和第二列內容

awk -F  #   {print $1,$2}  zcy2.txt

2、顯示文件第一列,倒是第一列,和倒數第二列的內容

awk  {print $1,$(NF-1),$(NF-2)}  alx.txt

linux awk 命令如何使用

3、取出本機的 IP 地址

linux awk 命令如何使用

使用 awk 的方式獲取的話,如果以空格為分隔符,我們發現目標字段在第二行的第二列,使用下面的命令即可,看起來,比起 sed 和 grep 命令似乎更簡單;

ifconfig eth0 | awk  NR==2{print $2}

linux awk 命令如何使用

4、取出密碼文件中的第一列和最后一列

考察對自定義輸入分隔符的使用,可以看到,下面的文本文件中,可以考慮使用:進行分割;

linux awk 命令如何使用

awk -F  :   {print $1,$NF}  pwd2.txt

linux awk 命令如何使用

三、OFS 輸出分隔符

通過上文的學習,我們知道 awk 命令執行后,默認采用空格分割字段,而這個空格就是默認的輸出分割符,

單在某些情況下,為了將數據展示的效果更加醒目一些,就可以使用 OFS 的自定義輸出分隔符;

仍然以上面的密碼文本為例,輸出第一列和最后一列的字段;

awk -F  :  -v OFS=  ***    {print $1,$NF}  pwd2.txt

該表默認輸出分隔符,直接在 awk 后面使用: -v OFS=‘自定義輸出分隔符’

linux awk 命令如何使用

四、awk 變量

awk 參數

參數說明 - F 指定分隔字段符 - v 定義或修改一個 awk 內部變量 - f 從腳本文件中讀取 awk 命令

對于 awk 來講,變量分為:內置變量和自定義變量

awk 內置變量

參數說明 FS 輸入字段分隔符,默認為空白字符 OFS 輸出字段分隔符,默認為空白字符 RS 輸入記錄分隔符,指定輸入時的換行符 ORS 輸出記錄分隔符,輸出時用指定符號替換換行符 NF 當前行的字段個數,字段數量 NR 行號,當前處理文本行的行號 FNR 各文件分別計數的行號 FILENAME 當前文件名 ARGC 命令行參數個數 ARGV 數組,保存的是命令行所給定的各個參數

比較常用的內置變量包括:NR,NF,FNR

FILENAME 使用

FILENAME 為 awk 的內置變量,通過下面這個命令,可以看到在每行記錄之前,輸出了當前文件名稱;

awk  NR==1,NR==3{print FILENAME,$0}  alx.txt

linux awk 命令如何使用

ARGV 使用

先來看下面這條命令的執行結果

awk  NR==1,NR==3{print ARGV[0],ARGV[1],$0}  alx.txt

linux awk 命令如何使用

可以發現,在輸出的每一行記錄前面,拼上了 awk 和 alx.txt 這兩個字段,這兩個字段就是這行命令整體解析出來的 2 個內置參數;

自定義變量

看下面這條命令輸出效果,通過 - v 參數,可以自定義變量進行參數傳遞;

awk -v myname= zcy   BEGIN{print  我的名字是?  ,myname}

linux awk 命令如何使用

五、awk 格式化輸出

在上文,我們接觸的是 awk 的輸出功能,主要使用了 print 這個進行輸出,它只能對文本進行簡單的輸出,但是并不能美化或者修改輸出格式;

printf 格式化輸出

如果對 C 語言有過了解的同學,對 printf 并不陌生,使用這個命令(函數)可以對文本進行格式化輸出;

printf 與 print 的幾點區別

printf 需要指定 format;

format 用于指定后面的每個 item 輸出格式;

printf 語句不會自動打印換行符;\n;print 默認添加換行符;

如下,假如我們直接使用 printf 這樣操作,看下效果

awk  {printf $0}  alx.txt

linux awk 命令如何使用

明顯來說,把所有內容都輸出到同一行了,這時候,就需要使用 printf 的格式化輸出來控制;

awk  {printf  %s\n , $0}  alx.txt

linux awk 命令如何使用

再看一個案例,使用 printf 將文本中的每一列添加前置輸出

awk  {printf  第一列:%s  第二列:%s  第三列:%s\n  ,$1,$2,$3}  alx.txt

linux awk 命令如何使用

六、awk 模式 pattern

上文了解到,awk 的語法如下:

awk [option]‘pattern[action]’file …

而且我們了解到,awk 是按行處理文本,以上都是關于 print 相關,接下來,聊聊 pattern 相關的內容;

在 pattern 中,有個比較常見的 pattern,BEGIN 和 END;

BEGIN 模式是處理文本之前需要執行的動作;

END 模式是處理完成所有的行之后執行的操作;

awk  BEGIN{print  小明在學 linux}

linux awk 命令如何使用

或者下面這樣

awk  BEGIN{print  小明在學 linux} {print $0}END{print  處理結束}  alx.txt

linux awk 命令如何使用

注意:BEGIN 和 END 分別放到處理文本內容前后即可

awk 如果不指定模式是按行處理,如果指定了模式,只有符合模式的才會被處理

awk 常用模式

關系運算符說明 小于 = 小于等于 == 等于!= 不等于 = 大于等于~ 匹配正則!~ 不匹配正則

1、打印前三行的文本內容

awk  NR =3{print $0}  alx.txt

linux awk 命令如何使用

2、匹配密碼文本中含有 zcy 的行

awk  /^zcy/{print $0}  pwd.txt

linux awk 命令如何使用

3、格式化輸出 /etc/passwd 的部分字段

awk -F  :   BEGIN{print 用戶名 \t\t\t 字段 1\t\t  字段 2\t\t  權限} {printf  user:%-20s%-20s%-20s%-20s\n , $1,$4,$5,$7}  pwd.txt

linux awk 命令如何使用

4、找出 pwd 文件中 nologin 的用戶

linux awk 命令如何使用

awk  /\/sbin\/nologin$/{print NR,$0}  pwd.txt

linux awk 命令如何使用

5、找出 下面這個區間的文本行

linux awk 命令如何使用

awk  /^daemon/,/^operator/{print NR,$0}  pwd.txt

linux awk 命令如何使用

以上就是“linux awk 命令如何使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-12發表,共計3857字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 淅川县| 治县。| 科尔| 云霄县| 昔阳县| 平湖市| 滦南县| 盐亭县| 仲巴县| 彝良县| 松江区| 宣城市| 鹰潭市| 贵德县| 常宁市| 定结县| 马公市| 德阳市| 辉县市| 仁布县| 瑞安市| 辽源市| 长白| 清涧县| 错那县| 广元市| 朝阳县| 二手房| 巫山县| 山东省| 台江县| 阜南县| 紫云| 申扎县| 青海省| 大同市| 阿巴嘎旗| 凌云县| 襄城县| 铜陵市| 密山市|