最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux中的awk命令使用詳解

 更新時(shí)間:2023年11月10日 08:40:14   作者:向陽(yáng)逐夢(mèng)  
這篇文章主要介紹了Linux中的awk命令使用詳解的相關(guān)資料,需要的朋友可以參考下

除了使用 sed 命令,Linux 系統(tǒng)中還有一個(gè)功能更加強(qiáng)大的文本數(shù)據(jù)處理工具,就是 awk

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

和 sed 命令類(lèi)似,awk 命令也是逐行掃描文件(從第 1 行到最后一行),尋找含有目標(biāo)文本的行,如果匹配成功,則會(huì)在該行上執(zhí)行用戶想要的操作;反之,則不對(duì)行做任何處理。awk 命令的基本格式為:

[root@localhost ~]# awk [選項(xiàng)] '腳本命令' 文件名

此命令常用的選項(xiàng)以及各自的含義

awk 的強(qiáng)大之處在于腳本命令,它由 2 部分組成,分別為匹配規(guī)則和執(zhí)行命令,如下所示:

'匹配規(guī)則{執(zhí)行命令}'

這里的匹配規(guī)則,和 sed 命令中的 address 部分作用相同,用來(lái)指定腳本命令可以作用到文本內(nèi)容中的具體行,可以使用字符串(比如 /demo/,表示查看含有 demo 字符串的行)或者正則表達(dá)式指定。另外需要注意的是,整個(gè)腳本命令是用單引號(hào)('')括起,而其中的執(zhí)行命令部分需要用大括號(hào)({})括起來(lái)。

在 awk 程序執(zhí)行時(shí),如果沒(méi)有指定執(zhí)行命令,則默認(rèn)會(huì)把匹配的行輸出;如果不指定匹配規(guī)則,則默認(rèn)匹配文本中所有的行。

舉個(gè)簡(jiǎn)單的例子:

[root@localhost ~]# awk '/^$/ {print "Blank line"}' test.txt

在此命令中,/^$/ 是一個(gè)正則表達(dá)式,功能是匹配文本中的空白行,同時(shí)可以看到,執(zhí)行命令使用的是 print 命令,此命令經(jīng)常會(huì)使用,它的作用很簡(jiǎn)單,就是將指定的文本進(jìn)行輸出。因此,整個(gè)命令的功能是,如果 test.txt 有 N 個(gè)空白行,那么執(zhí)行此命令會(huì)輸出 N 個(gè) Blank line。

awk 使用數(shù)據(jù)字段變量

awk 的主要特性之一是其處理文本文件中數(shù)據(jù)的能力,它會(huì)自動(dòng)給一行中的每個(gè)數(shù)據(jù)元素分配一個(gè)變量。

默認(rèn)情況下,awk 會(huì)將如下變量分配給它在文本行中發(fā)現(xiàn)的數(shù)據(jù)字段:

  • $0 代表整個(gè)文本行;
  • $1 代表文本行中的第 1 個(gè)數(shù)據(jù)字段;
  • $2 代表文本行中的第 2 個(gè)數(shù)據(jù)字段;
  • $n 代表文本行中的第 n 個(gè)數(shù)據(jù)字段。

前面說(shuō)過(guò),在 awk 中,默認(rèn)的字段分隔符是任意的空白字符(例如空格或制表符)。 在文本行中,每個(gè)數(shù)據(jù)字段都是通過(guò)字段分隔符劃分的。awk 在讀取一行文本時(shí),會(huì)用預(yù)定義的字段分隔符劃分每個(gè)數(shù)據(jù)字段。所以在下面的例子中,awk 程序讀取文本文件,只顯示第 1 個(gè)數(shù)據(jù)字段的值:

[root@localhost ~]# cat data2.txt
One line of test text.
Two lines of test text.
Three lines of test text.
[root@localhost ~]# awk '{print $1}' data2.txt
One
Two
Three

該程序用 $1 字段變量來(lái)表示“僅顯示每行文本的第 1 個(gè)數(shù)據(jù)字段”。當(dāng)然,如果你要讀取采用了其他字段分隔符的文件,可以用 -F 選項(xiàng)手動(dòng)指定。

awk 腳本命令使用多個(gè)命令

awk 允許將多條命令組合成一個(gè)正常的程序。要在命令行上的程序腳本中使用多條命令,只要在命令之間放個(gè)分號(hào)即可,例如:

[root@localhost ~]# echo "My name is Rich" | awk '{$4="Christine"; print $0}'
My name is Christine

第一條命令會(huì)給字段變量 $4 賦值。第二條命令會(huì)打印整個(gè)數(shù)據(jù)字段??梢钥吹?,awk 程序在輸出中已經(jīng)將原文本中的第四個(gè)數(shù)據(jù)字段替換成了新值。除此之外,也可以一次一行地輸入程序腳本命令,比如說(shuō):

[root@localhost ~]# awk '{
> $4="Christine"
> print $0}'
My name is Rich
My name is Christine

在你用了表示起始的單引號(hào)后,bash shell 會(huì)使用 > 來(lái)提示輸入更多數(shù)據(jù),我們可以每次在每行加一條命令,直到輸入了結(jié)尾的單引號(hào)。

注意,此例中因?yàn)闆](méi)有在命令行中指定文件名,awk 程序需要用戶輸入獲得數(shù)據(jù),因此當(dāng)運(yùn)行這個(gè)程序的時(shí)候,它會(huì)一直等著用戶輸入文本,此時(shí)如果要退出程序,只需按下 Ctrl+D 組合鍵即可。

awk從文件中讀取程序

跟 sed 一樣,awk 允許將腳本命令存儲(chǔ)到文件中,然后再在命令行中引用,比如:

[root@localhost ~]# cat awk.sh
{print $1 "'s home directory is " $6}
[root@localhost ~]# awk -F: -f awk.sh /etc/passwd
root's home directory is /root
bin's home directory is /bin
daemon's home directory is /sbin
adm's home directory is /var/adm
lp's home directory is /var/spool/lpd
...
Christine's home directory is /home/Christine
Samantha's home directory is /home/Samantha
Timothy's home directory is /home/Timothy

awk.sh 腳本文件會(huì)使用 print 命令打印 /etc/passwd 文件的主目錄數(shù)據(jù)字段(字段變量 $6),以及 userid 數(shù)據(jù)字段(字段變量 $1)。注意,在程序文件中,也可以指定多條命令,只要一條命令放一行即可,之間不需要用分號(hào)。

awk BEGIN關(guān)鍵字

awk 中還可以指定腳本命令的運(yùn)行時(shí)機(jī)。默認(rèn)情況下,awk 會(huì)從輸入中讀取一行文本,然后針對(duì)該行的數(shù)據(jù)執(zhí)行程序腳本,但有時(shí)可能需要在處理數(shù)據(jù)前運(yùn)行一些腳本命令,這就需要使用 BEGIN 關(guān)鍵字。

BEGIN 會(huì)強(qiáng)制 awk 在讀取數(shù)據(jù)前執(zhí)行該關(guān)鍵字后指定的腳本命令,例如:

[root@localhost ~]# cat data3.txt
Line 1
Line 2
Line 3
[root@localhost ~]# awk 'BEGIN {print "The data3 File Contents:"}
> {print $0}' data3.txt
The data3 File Contents:
Line 1
Line 2
Line 3

可以看到,這里的腳本命令中分為 2 部分,BEGIN 部分的腳本指令會(huì)在 awk 命令處理數(shù)據(jù)前運(yùn)行,而真正用來(lái)處理數(shù)據(jù)的是第二段腳本命令。

awk END關(guān)鍵字

和 BEGIN 關(guān)鍵字相對(duì)應(yīng),END 關(guān)鍵字允許我們指定一些腳本命令,awk 會(huì)在讀完數(shù)據(jù)后執(zhí)行它們,例如:

[root@localhost ~]# awk 'BEGIN {print "The data3 File Contents:"}
> {print $0}
> END {print "End of File"}' data3.txt
The data3 File Contents:
Line 1
Line 2
Line 3
End of File

可以看到,當(dāng) awk 程序打印完文件內(nèi)容后,才會(huì)執(zhí)行 END 中的腳本命令。

到此這篇關(guān)于Linux中的awk命令使用詳解的文章就介紹到這了,更多相關(guān)Linux中的awk命令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • linux userdel 命令的使用

    linux userdel 命令的使用

    這篇文章主要介紹了linux userdel 命令的使用,幫助大家更好的理解和使用Linux系統(tǒng),感興趣的朋友可以了解下
    2020-08-08
  • Linux下怎么切換使用兩個(gè)版本的JDK

    Linux下怎么切換使用兩個(gè)版本的JDK

    這篇文章主要介紹了Linux下切換使用兩個(gè)版本的JDK的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Linux高并發(fā)踩過(guò)的坑及性能優(yōu)化介紹

    Linux高并發(fā)踩過(guò)的坑及性能優(yōu)化介紹

    大家好,本篇文章主要講的是Linux高并發(fā)踩過(guò)的坑及性能優(yōu)化介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • Linux(CentOS7)安裝Tomcat與設(shè)置Tomcat為開(kāi)機(jī)啟動(dòng)項(xiàng)(tomcat8為例)

    Linux(CentOS7)安裝Tomcat與設(shè)置Tomcat為開(kāi)機(jī)啟動(dòng)項(xiàng)(tomcat8為例)

    本文以tomcat8為例給大家介紹Linux(CentOS7)安裝Tomcat與設(shè)置Tomcat為開(kāi)機(jī)啟動(dòng)項(xiàng),非常不錯(cuò),需要的朋友參考下
    2019-10-10
  • Linux中禁止用戶修改/重置密碼

    Linux中禁止用戶修改/重置密碼

    這篇文章主要給大家介紹了關(guān)于在Linux中禁止用戶修改/重置密碼的相關(guān)資料,文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面跟著小編一起來(lái)看看吧。
    2017-06-06
  • linux如何復(fù)制文件夾并重命名

    linux如何復(fù)制文件夾并重命名

    在Linux系統(tǒng)中,復(fù)制文件夾并重命名可以通過(guò)使用“cp”和“mv”命令來(lái)實(shí)現(xiàn),使用“cp -r”命令可以遞歸復(fù)制整個(gè)文件夾及其子文件夾和文件,而使用“mv”命令可以將復(fù)制后的文件夾重命名為新的名稱(chēng)
    2025-02-02
  • Apache使用.htaccess 屏蔽惡意 User Agent(防蜘蛛)

    Apache使用.htaccess 屏蔽惡意 User Agent(防蜘蛛)

    這篇文章主要介紹了Apache使用.htaccess 屏蔽惡意 User Agent(防蜘蛛),需要的朋友可以參考下
    2016-07-07
  • Linux進(jìn)程的優(yōu)先級(jí)&&進(jìn)程切換方式

    Linux進(jìn)程的優(yōu)先級(jí)&&進(jìn)程切換方式

    本文概述進(jìn)程優(yōu)先級(jí)與調(diào)度算法,涵蓋優(yōu)先級(jí)調(diào)整方法(nice、renice命令)及Linux 2.6 O(1)調(diào)度器,通過(guò)運(yùn)行隊(duì)列、task_struct結(jié)構(gòu)和位圖優(yōu)化進(jìn)程調(diào)度效率
    2025-07-07
  • Linux下指定源ip進(jìn)行ping操作的方法

    Linux下指定源ip進(jìn)行ping操作的方法

    今天小編就為大家分享一篇Linux下指定源ip進(jìn)行ping操作的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Linux刪除文件不同方法效率對(duì)比

    Linux刪除文件不同方法效率對(duì)比

    這篇文章主要介紹了Linux刪除文件不同方法效率對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08

最新評(píng)論

黄平县| 财经| 衡阳市| 威海市| 蒲江县| 黔西县| 南岸区| 通渭县| 桑植县| 象山县| 象山县| 南宁市| 建平县| 修武县| 莱州市| 南宁市| 翼城县| 唐海县| 会昌县| 泸州市| 普定县| 同心县| 农安县| 沙洋县| 道孚县| 湾仔区| 秦皇岛市| 洛阳市| 冕宁县| 大姚县| 平遥县| 仁怀市| 陕西省| 玉溪市| 册亨县| 安义县| 阜平县| 湟中县| 治县。| 同仁县| 齐河县|