在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

gawk程序基礎(chǔ)教程

馬哥Linux運(yùn)維 ? 來源:博客園Sunzz ? 2024-10-29 16:42 ? 次閱讀

gawk程序是Unix中原始awk程序的GNU版本。gawk程序讓流編輯器邁上了一個(gè)新的臺(tái)階,它提供了一種編程語言而不只是編輯器命令。在gawk編程語言中,可以完成下面的事情:
(1)定義變量來保存數(shù)據(jù);
(2)使用算數(shù)和字符串操作符來處理數(shù)據(jù);
(3)使用結(jié)構(gòu)化編程概念(比如if-then語句和循環(huán))來為數(shù)據(jù)處理增加處理邏輯;
(4)通過提取數(shù)據(jù)文件中的數(shù)據(jù)元素,將其重新排列或格式化,生成格式化報(bào)表;
gawk程序的報(bào)告生成能力通常用來從大文本文件中提取數(shù)據(jù)元素,并將它們格式化成可讀的報(bào)告。其中完美的例子是格式化日志文件。在日志文件中找出錯(cuò)誤行會(huì)很難,gawk程序可以讓你從日志文件中過濾出需要的數(shù)據(jù)元素,然后你可以將其格式化,使得重要的數(shù)據(jù)易于閱讀。

1 gawk命令格式

gawk option program file
選項(xiàng):描述
-F fs指定行中劃分?jǐn)?shù)據(jù)字段的字段分隔符
-f file從指定的文件中讀取程序
-v var=value定義gawk程序中的一個(gè)變量及其默認(rèn)值
-mf N指定要處理的數(shù)據(jù)文件中的最大字段數(shù)
-mr N指定數(shù)據(jù)文件中的最大數(shù)據(jù)行數(shù)
-W  keyword指定gawk的兼容模式或警告等級(jí)

命令行選項(xiàng)提供了一個(gè)簡(jiǎn)單的途徑來定制gawk程序中的功能。
gawk的強(qiáng)大之處在于程序腳本,可以寫腳本來讀取文本行的數(shù)據(jù),然后處理并顯示數(shù)據(jù),創(chuàng)建任何類型的輸出報(bào)告。

2 從命令行讀取程序腳本

(1)gawk程序及腳本用一對(duì)花括號(hào)來定義。你必須將命令放到兩個(gè)花括號(hào)“{}”中。如果你錯(cuò)誤的使用了圓括號(hào)來包含gawk腳本,就會(huì)出錯(cuò)。
(2)由于gawk命令行假定腳本是單個(gè)文本字符串,你還必須將腳本放到單引號(hào)中。
例如:

        [root@centos7 ~]# gawk '{print "Hello World!"}'

運(yùn)行這個(gè)命令,你可能會(huì)有些失望,因?yàn)槭裁炊疾粫?huì)發(fā)生。原因在于沒有在命令行上指定文件名,所有g(shù)awk程序會(huì)從STDIN接受數(shù)據(jù)。在運(yùn)行這個(gè)程序時(shí),它會(huì)一直等待從STDIN輸入的文本。
如果你輸入一行文本并按下回車鍵,gawk會(huì)對(duì)這行文本運(yùn)行一遍程序腳本。跟sed編輯器一樣,gawk程序會(huì)針對(duì)數(shù)據(jù)流中的每一行文本執(zhí)行程序。由于程序腳本被設(shè)為顯示一行固定的文本字符串,因此不管你在數(shù)據(jù)流中輸入什么文本,都會(huì)得到同樣的文本輸出。

[root@centos7 ~]# gawk '{print "Hello World!"}'
Thie is a error test
Hello World!
Hello World!
Hello World!

要終止這個(gè)程序,你必須標(biāo)明數(shù)據(jù)流已經(jīng)結(jié)束了。bash shell提供了一個(gè)組合鍵倆生成EOF(End –of-File)字符。Ctrl + D 組合鍵會(huì)字bash中產(chǎn)生一個(gè)EOF字符。這個(gè)組合鍵能夠終止該gawk程序并返回到命令行界面提示符下。

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

gawk的主要特征之一是其處理文本文件中數(shù)據(jù)的能力。它會(huì)自動(dòng)給一行的每個(gè)數(shù)據(jù)元素分配一個(gè)變量。默認(rèn)情況下,gawk會(huì)將如下變量分配給它在文本中發(fā)現(xiàn)的數(shù)據(jù)字段:

$0代表整個(gè)文本行
$1代表文本行的第一個(gè)數(shù)據(jù)段
$n代表文本行的第n個(gè)數(shù)據(jù)段

在文本行中,每個(gè)數(shù)據(jù)段都是通過字段分隔符劃分的。gawk在讀取一行文本時(shí),會(huì)用預(yù)定義的字段分隔符劃分每個(gè)字段。gawk中默認(rèn)的字段分隔符是任意的空白字符(例如空格或者制表符)。
例如,用-F指定字段分隔符。顯示系統(tǒng)密碼文件的第一個(gè)數(shù)據(jù)字段。由于/etc/passwd用冒號(hào)來分隔數(shù)據(jù)字段,因而可以將冒號(hào)指定為字段分隔符。

[root@centos7 ~]# gawk -F : '{print $1}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
[……]

4 在程序腳本中使用多個(gè)命令

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

[root@centos7 ~]# echo "My name is centos"|gawk '{$4="hahaha";print $0}'
My name is hahaha

第一條命令會(huì)給$4賦值。第二條命令會(huì)打印整個(gè)數(shù)據(jù)字段。注意,gawk程序在輸出中已經(jīng)將原文本中的第四個(gè)數(shù)據(jù)字段替換了新值。

5 從文本中讀取程序

跟sed編輯器一樣,gawk編輯器允許將程序存儲(chǔ)到文件中,然后再在命令行中引用。

[root@centos7 ~]# cat script2.gawk 
{print $1 "'s' home directory is " $6}
[root@centos7 ~]# gawk -F: -f script2.gawk  /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
sync's' home directory is /sbin
shutdown's' home directory is /sbin
halt's' home directory is /sbin
mail's' home directory is /var/spool/mail
[……]

script2.gawk程序腳本會(huì)再次使用print命令打印/etc/passwd文件中的主目錄數(shù)據(jù)字段(字段變量$6),以及userID數(shù)據(jù)字段(字段變量$1)。
可以在程序文件中指定多條命令。要這么做的話,只有一天命令放一行即可,不需要使用分號(hào)。

[root@centos7 ~]# cat script3.gawk 
{
text = "'s home directory is "
print $1 text $6
}
[root@centos7 ~]# gawk -F: -f script3.gawk /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
sync's home directory is /sbin
shutdown's home directory is /sbin
[……]

script3.gawk程序腳本定義了一個(gè)變量來保存print命令中用到的文本字符串。
注意:gawk程序在引用變量值時(shí)并未像shell腳本一樣使用美元符。

6 在處理數(shù)據(jù)前運(yùn)行腳本

gawk還允許指定程序腳本何時(shí)運(yùn)行。默認(rèn)情況下,gawk會(huì)從輸入中讀取一行文本,然后針對(duì)該行的數(shù)據(jù)執(zhí)行程序腳本。有時(shí)可能會(huì)需要在處理數(shù)據(jù)前運(yùn)行腳本,比如報(bào)告創(chuàng)建標(biāo)題。BEGIN關(guān)鍵字就是用來做這個(gè)的。它會(huì)強(qiáng)制gawk在讀取數(shù)據(jù)前執(zhí)行BEGIN關(guān)鍵字后指定的程序腳本。

[root@centos7 ~]# cat data3.txt 
Line 1
Line 2
Line 3
[root@centos7 ~]# gawk 'BEGIN{print "The data3 File contents:"}{print $0}' data3.txt The data3 File contents:
Line 1
Line 2
Line 3

在gawk執(zhí)行了BEGIN腳本后,它會(huì)用第二段腳本來處理文件數(shù)據(jù)。這么做是要小心,兩段腳本仍然被認(rèn)為是gawk命令行中的一個(gè)文本字符串。你需要相應(yīng)的加上單引號(hào)。

7 在處理數(shù)據(jù)后運(yùn)行腳本

與BEGIN關(guān)鍵字類似,END關(guān)鍵字允許你指定一個(gè)程序腳本,gawk會(huì)在讀完數(shù)據(jù)后執(zhí)行它。

[root@centos7 ~]# gawk '{print $0} END{print "End of file"}' data3.txt 
Line 1
Line 2
Line 3
End of file

當(dāng)gawk程序打印完文件內(nèi)容后,會(huì)執(zhí)行END腳本中的命令。這是在處理完所有正常數(shù)據(jù)后給報(bào)告添加頁腳的最佳方法。

鏈接:https://www.cnblogs.com/Sunzz/p/7232058.html

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編程語言
    +關(guān)注

    關(guān)注

    10

    文章

    1955

    瀏覽量

    36212
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3824

    瀏覽量

    82504
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    818

    瀏覽量

    31818

原文標(biāo)題:搞定文本處理!AWK(gawk)基礎(chǔ)教程,帶你快速上手文本三劍客之一!

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    [分享]VHDL基礎(chǔ)教程

    很不錯(cuò)的基礎(chǔ)教程怎么添加不了附件 VHDL基礎(chǔ)教程 [此貼子已經(jīng)被summao于2010-3-25 14:29:24編輯過]
    發(fā)表于 03-25 12:35

    PCB設(shè)計(jì)基礎(chǔ)教程

    PCB設(shè)計(jì)基礎(chǔ)教程
    發(fā)表于 03-30 23:13 ?0次下載

    CDMA基礎(chǔ)教程

    agilent的一份CDMA的基礎(chǔ)教程。希望有需要的喜歡
    發(fā)表于 05-28 00:46 ?33次下載

    MATLAB 7.0 基礎(chǔ)教程

    MATLAB 7.0 基礎(chǔ)教程 介紹MATLAB7.0的基礎(chǔ)教程,非常實(shí)用的教程
    發(fā)表于 12-18 11:44 ?6次下載

    Matlab基礎(chǔ)教程2

    Matlab基礎(chǔ)教程2Matlab基礎(chǔ)教程2Matlab基礎(chǔ)教程2Matlab基礎(chǔ)教程2
    發(fā)表于 12-24 16:33 ?2次下載

    CATIAV5基礎(chǔ)教程

    CATIAV5基礎(chǔ)教程
    發(fā)表于 02-14 17:17 ?1次下載

    java基礎(chǔ)教程(強(qiáng)烈推薦)

    java基礎(chǔ)教程(強(qiáng)烈推薦)
    發(fā)表于 03-19 11:23 ?12次下載

    ADS中文基礎(chǔ)教程(布局)

    ADS中文基礎(chǔ)教程
    的頭像 發(fā)表于 07-05 04:15 ?7665次閱讀

    Linux基礎(chǔ)教程之linux開機(jī)啟動(dòng)oracle詳細(xì)程序資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Linux基礎(chǔ)教程之linux開機(jī)啟動(dòng)oracle詳細(xì)程序資料說明。
    發(fā)表于 10-26 15:12 ?12次下載

    單片機(jī)基礎(chǔ)教程之匯編語言程序設(shè)計(jì)知識(shí)的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)基礎(chǔ)教程之匯編語言程序設(shè)計(jì)知識(shí)的詳細(xì)資料說明包括了:1 編程的步驟、方法和技巧,2 匯編語言源程序的編輯和匯編
    發(fā)表于 01-28 16:47 ?10次下載
    單片機(jī)<b class='flag-5'>基礎(chǔ)教程</b>之匯編語言<b class='flag-5'>程序</b>設(shè)計(jì)知識(shí)的詳細(xì)資料說明

    LabVIEW基礎(chǔ)教程

    LabVIEW基礎(chǔ)教程說明。
    發(fā)表于 04-20 14:03 ?136次下載

    python基礎(chǔ)教程

    python基礎(chǔ)教程
    發(fā)表于 06-24 15:08 ?22次下載

    Python基礎(chǔ)教程視頻全集

    Python基礎(chǔ)教程視頻全集
    發(fā)表于 06-24 15:05 ?10次下載

    Labview基礎(chǔ)教程

    Labview基礎(chǔ)教程
    發(fā)表于 12-13 11:51 ?4次下載

    程序設(shè)計(jì)基礎(chǔ)教程

    電子發(fā)燒友網(wǎng)站提供《程序設(shè)計(jì)基礎(chǔ)教程.pptx》資料免費(fèi)下載
    發(fā)表于 05-28 16:37 ?1次下載
    主站蜘蛛池模板: 国产人免费人成免费视频 | 都市激情 亚洲 | 国产在线视频网站 | 国产精品久久久久久久久齐齐 | 亚洲国产日韩女人aaaaaa毛片在线 | lsj老司机精品视频在线观看 | 欧美不卡一区 | 国产福利vr专区精品 | 天天操夜夜操美女 | 人人做人人澡人人人爽 | 中文字幕在线天堂 | 久久精品网站免费观看 | 激情五月开心网 | 日韩一级片免费在线观看 | 在线播放黄色 | yyy6080韩国三级理论 | 99精品国产高清自在线看超 | 日本一区高清视频 | 天天干夜夜夜操 | 亚洲男人的天堂在线观看 | 五月婷婷六月婷婷 | h网站在线免费观看 | www.九色.com| 亚洲欧美强伦一区二区另类 | 久久国产精品永久免费网站 | 正在播放欧美 | 涩涩色中文综合亚洲 | 人成电影免费观看在线 | 国产色婷婷精品免费视频 | 男人的天堂色偷偷之色偷偷 | 国产在线视频你懂得 | 特级免费毛片 | 日韩美女拍拍免费视频网站 | 又粗又硬又猛又黄的免费视频黑人 | 日韩一区二区三区免费 | 操操操操网 | 你懂的网站在线观看 | 色偷偷亚洲男人 | 黄色的视频网站 | 天堂综合| 91黄色视屏 |