目錄
linux三劍客
awk可以根據使用者指定的分隔符去工作,沒有指定,則預設為空格;
二、awk参数
三、OFS输出分隔符
四、awk变量
五、awk格式化输出
六、awk模式pattern
首頁 運維 linux運維 linux awk指令怎麼用

linux awk指令怎麼用

Feb 01, 2023 pm 06:46 PM
linux awk命令

在linux中,awk指令是文字資料處理工具,適合格式化文字文件,對文字檔案進行更複雜的加工處理、分析,語法「awk  [option]  'pattern[action]'  file . ..」。 awk具備強大的文字格式化能力,例如對一堆看起來沒有什麼規律的日誌文件,文字檔案等,透過awk指令之後,格式化輸出為專業的可以做為應用層級資料分析的樣式。

linux awk指令怎麼用

本教學操作環境:linux7.3系統、Dell G3電腦。

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

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

awk具備強大的文字格式化能力,例如對一堆看起來沒有什麼規律的日誌文件,文字檔案等,透過awk指令之後,格式化輸出為專業的可以做為應用級資料分析的樣式;

awk像是程式語言,支援條件判斷,數組,循環等諸多的功能;

linux三劍客

  • grep,擅長單純的尋找或符合文字內容;

  • sed,擅長文字編輯,處理符合的文字內容;

  • ##sed,擅長文字編輯,處理符合的文字內容;

awk,適合格式化文字文件,對文字檔案進行更複雜的加工處理、分析;

awk理論基礎

1、awk語法linux 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命令进行查看

简单案例展示

提前准备一个文本,内容如下

linux awk指令怎麼用

1、输出第二列内容

awk '{print $2}' alx.txt
登入後複製

linux awk指令怎麼用

2、输出多列内容

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

awk '{print $2,$3}' alx.txt
登入後複製

linux awk指令怎麼用

3、查看第三行内容

考察对NR的使用,NR表示第N行记录的模式匹配

awk 'NR==3{print $0}' alx.txt
登入後複製

linux awk指令怎麼用

输出多行

awk 'NR==5,NR==6{print $0}' alx.txt
登入後複製

linux awk指令怎麼用

4、输出从第3到第五行,并显示行号

awk 'NR==3,NR==5 {print NR,$0}' alx.txt
登入後複製

linux awk指令怎麼用

5、自定义输出内容

某些情况下,需要给每一列添加类似于excel的表头信息,就可以考虑使用awk的自定义输出;

awk '{print "第一列: "$1,"第二列: "$2}' alx.txt
登入後複製

linux awk指令怎麼用

需要注意的是大括号外面的使用 ’ 单引号,括号里面的使用双引号

二、awk参数

参数说明
-F指定分隔字段符
-v定义或修改一个awk内部变量
-f从脚本文件中读取awk命令

上文谈到,awk默认的字段分隔符为空格,但是像下面这样的文本,以 # 为分隔符,就需要用到自定义分隔符;

linux awk指令怎麼用

1、显示第一列和第二列内容

awk -F "#" '{print $1,$2}' zcy2.txt
登入後複製

linux awk指令怎麼用

2、显示文件第一列,倒是第一列,和倒数第二列的内容

awk '{print $1,$(NF-1),$(NF-2)}' alx.txt
登入後複製

1linux awk指令怎麼用

3、取出本机的IP地址

1linux awk指令怎麼用

使用awk的方式获取的话,如果以空格为分隔符,我们发现目标字段在第二行的第二列,使用下面的命令即可,看起来,比起sed和grep命令似乎更简单;

ifconfig eth0 | awk 'NR==2{print $2}'
登入後複製

1linux awk指令怎麼用

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

考察对自定义输入分隔符的使用,可以看到,下面的文本文件中,可以考虑使用 : 进行分割;

1linux awk指令怎麼用

awk -F ':' '{print $1,$NF}' pwd2.txt
登入後複製

1linux awk指令怎麼用

三、OFS输出分隔符

通过上文的学习,我们知道awk命令执行后,默认采用空格分割字段,而这个空格就是默认的输出分割符,

单在某些情况下,为了将数据展示的效果更加醒目一些,就可以使用OFS的自定义输出分隔符;

仍然以上面的密码文本为例,输出第一列和最后一列的字段;

awk -F ':' -v OFS=' *** ' '{print $1,$NF}' pwd2.txt
登入後複製

该表默认输出分隔符,直接在awk后面使用: -v OFS=‘自定义输出分隔符’

1linux 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
登入後複製

1linux awk指令怎麼用

ARGV使用

先来看下面这条命令的执行结果

awk 'NR==1,NR==3{print ARGV[0],ARGV[1],$0}' alx.txt
登入後複製

1linux awk指令怎麼用

可以发现,在输出的每一行记录前面,拼上了 awk 和 alx.txt这两个字段,这两个字段就是这行命令整体解析出来的2个内置参数;

自定义变量

看下面这条命令输出效果,通过-v参数,可以自定义变量进行参数传递;

awk -v myname="zcy" 'BEGIN{print "我的名字是?" ,myname}'
登入後複製

1linux 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
登入後複製

2linux awk指令怎麼用

再看一个案例,使用 printf 将文本中的每一列添加前置输出

awk '{printf "第一列:%s   第二列:%s   第三列:%s\n" ,$1,$2,$3}' alx.txt
登入後複製

2linux awk指令怎麼用

六、awk模式pattern

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

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

而且我们了解到,awk是按行处理文本,以上都是关于 print 相关,接下来,聊聊pattern相关的内容;

在pattern中,有个比较常见的pattern,BEGIN和END;

  • BEGIN 模式是处理文本之前需要执行的动作;
  • END模式是处理完成所有的行之后执行的操作;
awk 'BEGIN{print "小明在学linux"}'
登入後複製

2linux awk指令怎麼用

或者下面这样

awk 'BEGIN{print "小明在学linux"} {print $0}END{print "处理结束"}' alx.txt
登入後複製

2linux awk指令怎麼用

注意:BEGIN 和 END分别放到处理文本内容前后即可

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

awk常用模式

关系运算符说明
<小于
<=小于等于
==等于
!=不等于
>=大于等于
~匹配正则
!~不匹配正则

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

awk &#39;NR<=3{print $0}&#39; alx.txt
登入後複製

2linux awk指令怎麼用

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

awk &#39;/^zcy/{print $0}&#39; pwd.txt
登入後複製

2linux awk指令怎麼用

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

awk -F ":" &#39;BEGIN{print"用户名\t\t\t字段1\t\t     字段2\t\t     权限"} {printf "user:%-20s%-20s%-20s%-20s\n", $1,$4,$5,$7}&#39; pwd.txt
登入後複製

2linux awk指令怎麼用

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

2linux awk指令怎麼用

awk &#39;/\/sbin\/nologin$/{print NR,$0}&#39; pwd.txt
登入後複製

2linux awk指令怎麼用

5、找出 下面这个区间的文本行

linux awk指令怎麼用

awk &#39;/^daemon/,/^operator/{print NR,$0}&#39; pwd.txt
登入後複製

3linux awk指令怎麼用

相关推荐:《Linux视频教程

以上是linux awk指令怎麼用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vscode需要什麼電腦配置 vscode需要什麼電腦配置 Apr 15, 2025 pm 09:48 PM

VS Code 系統要求:操作系統:Windows 10 及以上、macOS 10.12 及以上、Linux 發行版處理器:最低 1.6 GHz,推薦 2.0 GHz 及以上內存:最低 512 MB,推薦 4 GB 及以上存儲空間:最低 250 MB,推薦 1 GB 及以上其他要求:穩定網絡連接,Xorg/Wayland(Linux)

Linux體系結構:揭示5個基本組件 Linux體系結構:揭示5個基本組件 Apr 20, 2025 am 12:04 AM

Linux系統的五個基本組件是:1.內核,2.系統庫,3.系統實用程序,4.圖形用戶界面,5.應用程序。內核管理硬件資源,系統庫提供預編譯函數,系統實用程序用於系統管理,GUI提供可視化交互,應用程序利用這些組件實現功能。

notepad怎麼運行java代碼 notepad怎麼運行java代碼 Apr 16, 2025 pm 07:39 PM

雖然 Notepad 無法直接運行 Java 代碼,但可以通過借助其他工具實現:使用命令行編譯器 (javac) 編譯代碼,生成字節碼文件 (filename.class)。使用 Java 解釋器 (java) 解釋字節碼,執行代碼並輸出結果。

vscode終端使用教程 vscode終端使用教程 Apr 15, 2025 pm 10:09 PM

vscode 內置終端是一個開發工具,允許在編輯器內運行命令和腳本,以簡化開發流程。如何使用 vscode 終端:通過快捷鍵 (Ctrl/Cmd ) 打開終端。輸入命令或運行腳本。使用熱鍵 (如 Ctrl L 清除終端)。更改工作目錄 (如 cd 命令)。高級功能包括調試模式、代碼片段自動補全和交互式命令歷史。

vscode 無法安裝擴展 vscode 無法安裝擴展 Apr 15, 2025 pm 07:18 PM

VS Code擴展安裝失敗的原因可能包括:網絡不穩定、權限不足、系統兼容性問題、VS Code版本過舊、殺毒軟件或防火牆干擾。通過檢查網絡連接、權限、日誌文件、更新VS Code、禁用安全軟件以及重啟VS Code或計算機,可以逐步排查和解決問題。

git怎麼查看倉庫地址 git怎麼查看倉庫地址 Apr 17, 2025 pm 01:54 PM

要查看 Git 倉庫地址,請執行以下步驟:1. 打開命令行並導航到倉庫目錄;2. 運行 "git remote -v" 命令;3. 查看輸出中的倉庫名稱及其相應的地址。

vscode在哪寫代碼 vscode在哪寫代碼 Apr 15, 2025 pm 09:54 PM

在 Visual Studio Code(VSCode)中編寫代碼簡單易行,只需安裝 VSCode、創建項目、選擇語言、創建文件、編寫代碼、保存並運行即可。 VSCode 的優點包括跨平台、免費開源、強大功能、擴展豐富,以及輕量快速。

vscode 可以用於 mac 嗎 vscode 可以用於 mac 嗎 Apr 15, 2025 pm 07:36 PM

VS Code 可以在 Mac 上使用。它具有強大的擴展功能、Git 集成、終端和調試器,同時還提供了豐富的設置選項。但是,對於特別大型項目或專業性較強的開發,VS Code 可能會有性能或功能限制。

See all articles