linux awk 內置變量使用介紹
一、內置變量表
| 屬性 | 說明 |
| $0 | 當前記錄(作為單個變量) |
| $1~$n | 當前記錄的第n個字段,字段間由FS分隔 |
| FS | 輸入字段分隔符 默認是空格 |
| NF | 當前記錄中的字段個數(shù),就是有多少列 |
| NR | 已經讀出的記錄數(shù),就是行號,從1開始 |
| RS | 輸入的記錄他隔符默 認為換行符 |
| OFS | 輸出字段分隔符 默認也是空格 |
| ORS | 輸出的記錄分隔符,默認為換行符 |
| ARGC | 命令行參數(shù)個數(shù) |
| ARGV | 命令行參數(shù)數(shù)組 |
| FILENAME | 當前輸入文件的名字 |
| IGNORECASE | 如果為真,則進行忽略大小寫的匹配 |
| ARGIND | 當前被處理文件的ARGV標志符 |
| CONVFMT | 數(shù)字轉換格式 %.6g |
| ENVIRON | UNIX環(huán)境變量 |
| ERRNO | UNIX系統(tǒng)錯誤消息 |
| FIELDWIDTHS | 輸入字段寬度的空白分隔字符串 |
| FNR | 當前記錄數(shù) |
| OFMT | 數(shù)字的輸出格式 %.6g |
| RSTART | 被匹配函數(shù)匹配的字符串首 |
| RLENGTH | 被匹配函數(shù)匹配的字符串長度 |
| SUBSEP | \034 |
2、實例
1、常用操作
[chengmo@localhost ~]$ awk '/^root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
/^root/ 為選擇表達式,$0代表是逐行
2、設置字段分隔符號(FS使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":"}/^root/{print $1,$NF}' /etc/passwd
root /bin/bash
FS為字段分隔符,可以自己設置,默認是空格,因為passwd里面是”:”分隔,所以需要修改默認分隔符。NF是字段總數(shù),$0代表當前行記錄,$1-$n是當前行,各個字段對應值。
3、記錄條數(shù)(NR,FNR使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":"}{print NR,$1,$NF}' /etc/passwd
1 root /bin/bash
2 bin /sbin/nologin
3 daemon /sbin/nologin
4 adm /sbin/nologin
5 lp /sbin/nologin
6 sync /bin/sync
7 shutdown /sbin/shutdown
……
NR得到當前記錄所在行
4、設置輸出字段分隔符(OFS使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";OFS="^^"}/^root/{print FNR,$1,$NF}' /etc/passwd
1^^root^^/bin/bash
OFS設置默認字段分隔符
5、設置輸出行記錄分隔符(ORS使用方法)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";ORS="^^"}{print FNR,$1,$NF}' /etc/passwd
1 root /bin/bash^^2 bin /sbin/nologin^^3 daemon /sbin/nologin^^4 adm /sbin/nologin^^5 lp /sbin/nologin
從上面看,ORS默認是換行符,這里修改為:”^^”,所有行之間用”^^”分隔了。
6、輸入?yún)?shù)獲取(ARGC ,ARGV使用)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";print "ARGC="ARGC;for(k in ARGV) {print k"="ARGV[k]; }}' /etc/passwd
ARGC=2
0=awk
1=/etc/passwd
ARGC得到所有輸入?yún)?shù)個數(shù),ARGV獲得輸入?yún)?shù)內容,是一個數(shù)組。
7、獲得傳入的文件名(FILENAME使用)
[chengmo@localhost ~]$ awk 'BEGIN{FS=":";print FILENAME}{print FILENAME}' /etc/passwd
/etc/passwd
FILENAME,$0-$N,NF 不能使用在BEGIN中,BEGIN中不能獲得任何與文件記錄操作的變量。
8、獲得linux環(huán)境變量(ENVIRON使用)
[chengmo@localhost ~]$ awk 'BEGIN{print ENVIRON["PATH"];}' /etc/passwd
/usr/lib/qt-3.3/bin:/usr/kerberos/bin:/usr/lib/ccache:/usr/lib/icecc/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/java/jdk1.5.0_17/bin:/usr/java/jdk1.5.0_17/jre/bin:/usr/local/mysql/bin:/home/web97/bin
ENVIRON是子典型數(shù)組,可以通過對應鍵值獲得它的值。
9、輸出數(shù)據(jù)格式設置:(OFMT使用)
[chengmo@localhost ~]$ awk 'BEGIN{OFMT="%.3f";print 2/3,123.11111111;}' /etc/passwd
0.667 123.111
OFMT默認輸出格式是:%.6g 保留六位小數(shù),這里修改OFMT會修改默認數(shù)據(jù)輸出格式。
10、按寬度指定分隔符(FIELDWIDTHS使用)
[chengmo@localhost ~]$ echo 20100117054932 | awk 'BEGIN{FIELDWIDTHS="4 2 2 2 2 3"}{print $1"-"$2"-"$3,$4":"$5":"$6}'
2010-01-17 05:49:32
FIELDWIDTHS其格式為空格分隔的一串數(shù)字,用以對記錄進行域的分隔,F(xiàn)IELDWIDTHS="4 2 2 2 2 2"就表示$1寬度是4,$2是2,$3是2 .... 。這個時候會忽略:FS分隔符。
11、RSTART RLENGTH使用
[chengmo@localhost ~]$ awk 'BEGIN{start=match("this is a test",/[a-z]+$/); print start, RSTART, RLENGTH }'
11 11 4
[chengmo@localhost ~]$ awk 'BEGIN{start=match("this is a test",/^[a-z]+$/); print start, RSTART, RLENGTH }'
0 0 –1
RSTART 被匹配正則表達式首位置,RLENGTH 匹配字符長度,沒有找到為-1.
以上是:awk的一些內置變量使用,希望有什么問題可以與我交流。
相關文章

Fedora Linux 42 穩(wěn)定版發(fā)布: 帶來大量新功能和軟件更新
Fedora 42昨日發(fā)布,這是 Red Hat 贊助開發(fā)的杰出前沿 Linux 發(fā)行版的最新版,包含大量新功能和軟件更新,使其成為 2025 年上半年發(fā)布的一款出色的 Linux 操作系統(tǒng)之一,內2025-04-16
如何在Linux查看硬盤信息? 查看Linux硬盤大小類型和硬件信息的5種方法
使用Linux系統(tǒng)的過程中,查看和了解硬盤信息是非常重要的工作,尤其是對于系統(tǒng)管理員而言,那么在Linux系統(tǒng)中如何查看硬盤信息?以下是具體內容介紹2025-03-12
如何在 Linux 中查看 CPU 詳細信息? 3招輕松查看CPU型號、核心數(shù)和溫度
在日常運維工作中,獲取 CPU 信息是系統(tǒng)運維管理員常見的工作內容,無論是為了性能調優(yōu)、硬件升級還是僅僅滿足好奇心2025-03-11
什么是 Arch Linux? 獨樹一幟的Arch Linux發(fā)行版分析
Arch Linux是為簡化,優(yōu)化,現(xiàn)代化,實用主義,用戶中心和多功能性而創(chuàng)建Linux發(fā)行版,究竟是什么讓 Arch 與眾不同?下面我們就來簡要解讀2025-02-19
如何在Linux環(huán)境下制作 Win11裝機U盤?
一直用的linux辦公,想要將筆記本電腦從 Linux 系統(tǒng)切換回 Windows 11,我們可以制作一個win11裝機u盤,詳細如下2025-02-17
Rsnapshot怎么用? 基于Rsync的強大Linux備份工具使用指南
Rsnapshot 不僅可以備份本地文件,還能通過 SSH 備份遠程文件,接下來詳細介紹如何安裝、配置和使用 Rsnapshot,包括創(chuàng)建每小時、每天、每周和每月的本地備份,以及如何進2025-02-06
Linux Kernel 6.13發(fā)布:附更新內容及新特性解讀
Linux 內核 6.13 正式發(fā)布,新版本引入了惰性搶占支持,簡化內核搶占邏輯,通過減少與調度器相關的調用次數(shù),讓內核在運行時表現(xiàn)更優(yōu),從而提高效率2025-01-23
五大特性引領創(chuàng)新! 深度操作系統(tǒng) deepin 25 Preview預覽版發(fā)布
今日,深度操作系統(tǒng)正式推出deepin 25 Preview版本,該版本集成了五大核心特性:磐石系統(tǒng)、全新DDE、Treeland窗口合成器、AI For OS以及Distrobox子系統(tǒng)2025-01-18
Linux Mint Xia 22.1重磅發(fā)布: 重要更新一覽
Beta 版 Linux Mint“Xia” 22.1 發(fā)布,新版本基于 Ubuntu 24.04,內核版本為 Linux 6.8,這次更新帶來了諸多優(yōu)化和改進,進一步鞏固了 Mint 在 Linux 桌面操作系統(tǒng)領域的2025-01-16
LinuxMint怎么安裝? Linux Mint22下載安裝圖文教程
Linux Mint22發(fā)布以后,有很多新功能,很多朋友想要下載并安裝,該怎么操作呢?下面我們就來看看詳細安裝指南2025-01-16








