国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Linux 三劍客命令之 awk 詳解

這篇具有很好參考價值的文章主要介紹了Linux 三劍客命令之 awk 詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

一、Awk 實戰(zhàn)講解

1.1 awk 的原理

1.2 BEGIN 和 END 模塊

1.3 運算符

1.4 常用 awk 內(nèi)置變量

1.5 awk 正則

1.6 awk 常用字符串函數(shù)


一、Awk 實戰(zhàn)講解

????????awk 是一種很棒的語言,它適合文本處理和報表生成,其語法較為常見,借鑒了某些語言的一些精華,如 C 語言等。在 linux 系統(tǒng)日常處理工作中,發(fā)揮很重要的作用,掌握了 awk 將會使你的工作變的高大上。 awk 是三劍客的老大,利劍出鞘,必會不同凡響。

1.1 awk 的原理

通過一個簡短的命令,我們來了解其工作原理:

$ awk '{print $0}' /etc/passwd
$ echo hhh | awk '{print "hello,world"}'
$ awk '{ print "hiya" }' /etc/passwd

????????你將會見到 /etc/passwd 文件的內(nèi)容出現(xiàn)在眼前?,F(xiàn)在,解釋 awk 做了些什么。調(diào)用 awk時,我們指定 /etc/passwd 作為輸入文件。執(zhí)行 awk 時,它依次對 /etc/passwd 中的每一行執(zhí)行 print 命令。所有輸出都發(fā)送到 stdout,所得到的結(jié)果與執(zhí)行 cat /etc/passwd 完全相同。

????????現(xiàn)在,解釋 { print } 代碼塊。在 awk 中,花括號用于將幾塊代碼組合到一起,這一點類似于 C 語言。在代碼塊中只有一條 print 命令。在 awk 中,如果只出現(xiàn) print 命令,那么將打印當前行的全部內(nèi)容。

再次說明,awk 對輸入文件中的每一行都執(zhí)行這個腳本。

linux awk,Shell,linux,unix,服務(wù)器

$ awk -F":" '{ print $1 }' /etc/passwd
$ awk -F":" '{ print $1 $3 }' /etc/passwd
$ awk -F":" '{ print $1 " " $3 }' /etc/passwd
$ awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd

1.2 BEGIN 和 END 模塊

????????通常,對于每個輸入行,awk 都會執(zhí)行每個腳本代碼塊一次。然而,在許多編程情況中,
可能需要在 awk 開始處理輸入文件中的文本之前執(zhí)行初始化代碼。對于這種情況,awk 允許
您定義一個 BEGIN 塊。我們在前一個示例中使用了 BEGIN 塊。因為 awk 在開始處理輸入文
件之前會執(zhí)行 BEGIN 塊,因此它是初始化 FS(字段分隔符)變量、打印頁眉或初始化其它
在程序中以后會引用的全局變量的極佳位置。

????????awk 還提供了另一個特殊塊,叫作 END 塊。awk 在處理了輸入文件中的所有行之后執(zhí)行
這個塊。通常,END 塊用于執(zhí)行最終計算或打印應(yīng)該出現(xiàn)在輸出流結(jié)尾的摘要信息。

1.3 運算符

linux awk,Shell,linux,unix,服務(wù)器

  • awk 賦值運算符

a+5;等價于: a=a+5; 其他同類

[root@master1-admin ~]# awk 'BEGIN{a=5;a+=5;print a}'
10
  • awk 邏輯運算符
[root@master1-admin ~]# awk 'BEGIN{a=1;b=2;print(a>2&&b>1,a=1||b>1)}'
0 1
  • awk 正則運算符?
[root@master1-admin ~]# awk 'BEGIN{a="100testaaa";if(a~/100/){print "ok"}}'
ok

[root@master1-admin ~]# echo | awk 'BEGIN{a="100testaaa"}a~/100/{print "ok"}'
ok
  • 關(guān)系運算符

????????如:> < 可以作為字符串比較,也可以用作數(shù)值比較,關(guān)鍵看操作數(shù)如果是字符串就會轉(zhuǎn)換為字符串比較。兩個都為數(shù)字才轉(zhuǎn)為數(shù)值比較。字符串比較:按照 ascii 碼順序比較。?

[root@master1-admin ~]# awk 'BEGIN{a="11";if(a>=9){print "ok"}}'
[root@master1-admin ~]# awk 'BEGIN{a=11;if(a>=9){print "ok"}}'
ok
[root@master1-admin ~]# awk 'BEGIN{a;if(a>=b){print "ok"}}'
ok
  • awk 算術(shù)運算符

說明,所有用作算術(shù)運算符進行操作,操作數(shù)自動轉(zhuǎn)為數(shù)值,所有非數(shù)值都變?yōu)?0。

[root@master1-admin ~]# awk 'BEGIN{a="b";print a++,++a}'
0 2

[root@master1-admin ~]# awk 'BEGIN{a="20b4";print a++,++a}'
20 22

1.4 常用 awk 內(nèi)置變量

linux awk,Shell,linux,unix,服務(wù)器

  • 字段分隔符 FS

FS="\t" 一個或多個 Tab 分隔

[root@master1-admin ~]# vim tab.txt
ww	CC	IDD

[root@master1-admin ~]# awk 'BEGIN{FS="\t+"}{print $1,$2,$3}' tab.txt
ww CC IDD 

FS="[[:space:]+]" 一個或多個空白空格,默認的

[root@master1-admin ~]# vim space.txt
we are    studing awk now!

[root@master1-admin ~]# awk -F [[:space:]+] '{print $1,$2,$3,$4,$5}' space.txt
we are 

[root@master1-admin ~]# awk -F [[:space:]+] '{print $1,$2}' space.txt
we are

FS="[" ":]+" 以一個或多個空格或:分隔

[root@master1-admin ~]# vim hello.txt
root:x:0:0:root: /root:/bin/bash

[root@master1-admin ~]# awk -F [" ":]+ '{print $1,$2,$3}' hello.txt
root x 0
  • 字段數(shù)量 NF

[root@master1-admin ~]# vim hello.txt
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin:888

[root@master1-admin ~]# awk -F ":" 'NF==8{print $0}' hello.txt
bin:x:1:1:bin:/bin:/sbin/nologin:888
  • 記錄數(shù)量 NR
[root@master1-admin ~]# ifconfig ens32
ens32: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.78.135  netmask 255.255.255.0  broadcast 192.168.78.255
        inet6 fe80::20c:29ff:fe2e:bef7  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:2e:be:f7  txqueuelen 1000  (Ethernet)
        RX packets 3553  bytes 295498 (288.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13802  bytes 1002340 (978.8 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@master1-admin ~]# ifconfig ens32 | awk -F [" ":]+ 'NR==2{print $3}'
192.168.78.135
  • RS 記錄分隔符變量

????????將 FS 設(shè)置成 "\n" 告訴 awk 每個字段都占據(jù)一行。通過將 RS 設(shè)置成 "",還會告訴 awk
每個地址記錄都由空白行分隔。?

[root@master1-admin ~]# vim recode.txt
Jimmy the Weasel
100 Pleasant Drive
San Francisco, CA 12345

Big Tony
200 Incognito Ave.
Suburbia, WA 67890

[root@master1-admin ~]# vim awk.txt
#!/bin/awk
BEGIN {
    FS="\n"
    RS=""
}
{
    print $1 ", " $2 ", " $3
}

[root@master1-admin ~]# awk -f awk.txt recode.txt
Jimmy the Weasel, 100 Pleasant Drive, San Francisco, CA 12345
Big Tony, 200 Incognito Ave., Suburbia, WA 67890
  • OFS 輸出字段分隔符

[root@master1-admin ~]# awk 'BEGIN{FS=":"}{print $1","$2","$3}' hello.txt
root,x,0
bin,x,1
[root@master1-admin ~]# awk 'BEGIN{FS=":";OFS="#"}{print $1,$2,$3}' hello.txt
root#x#0
bin#x#1
  • ?ORS 輸出記錄分隔符

[root@master1-admin ~]# vim awk.txt
#!/bin/awk
BEGIN {
    FS="\n"
    RS=""
    ORS="\n\n"
}
{
    print $1 ", " $2 ", " $3
}

[root@master1-admin ~]# awk -f awk.txt recode.txt
Jimmy the Weasel, 100 Pleasant Drive, San Francisco, CA 12345

Big Tony, 200 Incognito Ave., Suburbia, WA 67890

1.5 awk 正則

linux awk,Shell,linux,unix,服務(wù)器

  • 規(guī)則表達式

????????awk '/REG/{action} ' file,/REG/ 為正則表達式,可以將 $0 中,滿足條件的記錄送入到:
action 進行處理?

[root@master1-admin ~]# awk '/root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

[root@master1-admin ~]# awk -F : '$5~/root/{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

# 取出 ip
[root@master1-admin ~]# ifconfig ens32 | awk 'BEGIN{FS="[[:space:]:]+"} NR==2{print $3}'
192.168.78.135
  • 布爾表達式

awk '布爾表達式{action}' file 僅當對前面的布爾表達式求值為真時,awk 才執(zhí)行代碼塊。

[root@master1-admin ~]# awk -F: '$1=="root"{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

[root@master1-admin ~]# awk -F: '($1=="root")&&($5=="root"){print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash

1.6 awk 常用字符串函數(shù)

linux awk,Shell,linux,unix,服務(wù)器

linux awk,Shell,linux,unix,服務(wù)器

  • 替換

????????在 info 中查找滿足正則表達式,/[0-9]+/ 用 ”!” 替換,并且替換后的值,賦值給 info 未給 info 值,默認是 $0?

[root@master1-admin ~]# awk 'BEGIN{info="this is a test2010test!";gsub(/[0-9]+/,"!",info);print info}'
this is a test!test!
  • 查找
# 未找到,返回 0
[root@master1-admin ~]# awk 'BEGIN{info="this is a test2010test!";print index(info,"test")?"ok":"no found";}'
ok
  • 匹配查找?

如果查找到數(shù)字則匹配成功返回 ok,否則失敗,返回未找到?文章來源地址http://www.zghlxwxcb.cn/news/detail-776536.html

[root@master1-admin ~]# awk 'BEGIN{info="this is a test2010test!";print match(info,/[0-9]+/)?"ok":"no found";}'
ok
  • 截取
# 從第 4 個 字符開始,截取 10 個長度字符串
[root@master1-admin ~]# awk 'BEGIN{info="this is a test2010test!";print substr(info,4,10);}'
s is a tes
  • 分割
# 分割 info,動態(tài)創(chuàng)建數(shù)組 tA,awk for ...in 循環(huán),是一個無序的循環(huán)。并不是從數(shù)組下標 1...n 開始
[root@master1-admin ~]# awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'
4
4 test
1 this
2 is
3 a

到了這里,關(guān)于Linux 三劍客命令之 awk 詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Linux:文本三劍客之a(chǎn)wk

    Linux:文本三劍客之a(chǎn)wk

    awk:是一種 處理文本文件的語言 ,是一個強大的 文本分析工具 。 awk: 逐行讀取文本 ,默認以 空格 或 tab鍵 為分隔符 進行分隔 ,將分隔所得的 各個字段 保存到 內(nèi)建變量 中,并按模式或者條件執(zhí)行編輯命令。 1、sed命令常用于一整行的處理,而awk比較 傾向于將一行分成

    2024年02月05日
    瀏覽(92)
  • Linux文本三劍客---grep、sed、awk

    Linux文本三劍客---grep、sed、awk

    awk、grep、sed是linux操作文本的三大利器,三者的功能都是處理文本,但側(cè)重點各不相同,其中屬awk功能最強大,但也最復(fù)雜。grep更適合單純的查找或匹配文本,sed更適合編輯匹配到的文本,awk更適合格式化文本,對文本進行較復(fù)雜格式處理。 1、grep 1.1 命令格式 1.2命令功能

    2024年02月14日
    瀏覽(93)
  • linux文本三劍客---grep,sed,awk

    linux文本三劍客---grep,sed,awk

    目錄 grep 什么是grep? grep實例演示 命令參數(shù): 案例演示: sed 概念: ?常用選項: 案例演示: awk 概念: awk常用命令選項: awk變量: 內(nèi)置變量 自定義變量 awk的簡單案例 在“a b c d”的d后面插入三個字符 統(tǒng)計tcp連接狀態(tài)數(shù)量 ?統(tǒng)計日志中狀態(tài)碼非200的IP的次數(shù) 什么是grep?

    2024年02月13日
    瀏覽(90)
  • Linux文本三劍客(grep、sed、awk)

    Linux文本三劍客(grep、sed、awk)

    目錄 grep 1、什么是grep和rgrep? 2、使用grep 2.1、命令格式 2.2、命令功能 2.3、命令參數(shù) 3、實戰(zhàn)演示 sed 1、認識sed 2、使用sed 2.1、命令格式 2.2、常用選項options 2.3、地址定界 2.4、編輯命令command 3、sed用法演示 3.1、常用選項用法演示 3.2、sed地址定界演示 3.3、編輯命令command演示

    2024年02月03日
    瀏覽(95)
  • Linux 文本處理三劍客:grep、sed 和 awk

    awk、grep、sed是linux操作文本的三大利器,合稱文本三劍客,也是必須掌握的linux命令之一。三者的功能都是處理文本,但側(cè)重點各不相同,其中屬awk功能最強大,但也最復(fù)雜。grep更適合單純的查找或匹配文本,sed更適合編輯匹配到的文本,awk更適合格式化文本,對文本進行較

    2024年01月17日
    瀏覽(95)
  • Linux中字符處理三劍客(grep sed awk )

    在 Linux 系統(tǒng)中,字符處理流程可以利用三個常用的工具來完成,三劍客的具體說明如下: grep:grep 是一種強大的文本搜索工具,可以搜索文件內(nèi)容中包含指定文本的行,并打印出包含該文本的行。grep 命令通常用于搜索日志文件、配置文件等。 在Linux中,\\\"grep\\\"是一種文本搜索

    2024年02月08日
    瀏覽(114)
  • Linux三劍客——Linux grep命令詳解:查找文件內(nèi)容

    很多時候,我們并不需要列出文件的全部內(nèi)容,而是從文件中找到包含指定信息的那些行,要實現(xiàn)這個目的,可以使用?grep 命令。 grep 命令 作為 Linux 文本處理三劍客的一員,另外兩個是 sed 和 awk ,我們會在后面的文章中作詳細介紹。 grep 命令 的由來可以追溯到 UNIX 誕生的

    2024年02月11日
    瀏覽(81)
  • Shell腳本攻略:文本三劍客之a(chǎn)wk

    Shell腳本攻略:文本三劍客之a(chǎn)wk

    目錄 一、理論 1.awk原理 2.awk打印 ?3.awk條件判斷 4.awk數(shù)組與循環(huán) 5.awk函數(shù) 6.常用命令 二、實驗 1.統(tǒng)計磁盤可用容量 2.統(tǒng)計/etc下文件總大小 3.CPU使用率 4.統(tǒng)計內(nèi)存 5.監(jiān)控硬盤 (1)概念 awk由 Aho,Weinberger 和 Kernighan 創(chuàng)建的文本模式掃描和處理語言。 awk非常復(fù)雜,所以這不是一

    2024年02月08日
    瀏覽(83)
  • Linux三劍客grep、sed、awk(包括練習(xí)題)

    Linux grep (global regular expression) 命令用于查找文件里符合條件的字符串或正則表達式。 基本用法與常見的正則表達式 擴展正則表達式實踐 此處使用grep -E 進行實踐擴展正則,egrep官網(wǎng)已經(jīng)棄用 注意:sed和awk使用單引號,雙引號有特殊解釋 sed是Stream Editor(字符流編輯器)的縮寫

    2024年02月11日
    瀏覽(89)
  • Linux三劍客(awk、sed、grep) 和 正則表達式

    Linux三劍客(awk、sed、grep) 和 正則表達式

    本文章適用于一定工作經(jīng)驗(熟悉Linux基礎(chǔ))的同行,歡迎各位大佬批判指正。 上手三劍客(grep,sed,awk)之前,需要熟悉正則表達式, 正則表達式 ——事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規(guī)則字符串”,這個“規(guī)則字符串”用來表達對字符串的

    2024年02月15日
    瀏覽(90)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包