人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Shell?AWK編程的基本介紹和使用詳解

發(fā)布日期:2022-07-20 19:39 | 文章來源:源碼之家

1、AWK介紹

(1)AWK概述

AWK是一種處理文本文件的語言,是一個(gè)強(qiáng)大的文本分析工具。

AWK可以看成一門獨(dú)立的語言,它擁有語言的基本特征,換句話說AWK可以寫出極其繁瑣和復(fù)雜的程序,AWK的語法比Shell的語法還難以接收。但絕大多數(shù)情況下,我們并不需要用AWK寫過于復(fù)雜的東西,建議能用Shell處理的需求就不用AWK來解決。

當(dāng)用AWK處理需求遠(yuǎn)要比Shell處理簡單的多的時(shí)候,我們就用AWK來解決。

AWK也是用來截取列信息的,它比Shell中的cut命令更先進(jìn),比如對(duì)空格作為分隔符的處理。

(2)printf格式化輸出

在學(xué)習(xí)AWK之前,我們要先學(xué)習(xí)一下printf格式化輸出命令,這個(gè)命令是AWK基本輸出中必須要用到的一個(gè)命令。

AWK的標(biāo)準(zhǔn)輸出支持print命令和printf命令,這兩個(gè)命令在AWK當(dāng)中基本作用是一樣的,但是Linux命令中只支持printf命令,如下:

# 在Linux中執(zhí)行print命令和printf命令
[root@192 ~]# print
# 報(bào)錯(cuò)命令沒有找到
-bash: print: command not found
[root@192 ~]# printf
# 提示你命令格式寫錯(cuò)了
printf: usage: printf [-v var] format [arguments]

我們可以看到Linux系統(tǒng)中只支持printf命令,所以我們這里就先學(xué)習(xí)一下printf命令。

(3)printf命令說明

[root@localhost ~]# printf '輸出類型輸出格式' 輸出內(nèi)容
輸出類型:
  %ns:輸出字符串。n是數(shù)字指輸出幾個(gè)字符。
  %ni:輸出整數(shù)。n是數(shù)字指輸出幾個(gè)數(shù)字。
  %m.nf:輸出浮點(diǎn)數(shù)。m和n是數(shù)字,指輸出的總位數(shù)和小數(shù)位數(shù)。如%8.2f代表共輸出8位數(shù),其中2位是小數(shù),6位是整數(shù)。
輸出格式:
  \a:輸出警告聲音。
  \b:輸出退格鍵,也就是Backspace鍵。
  \f:清除屏幕。
  \n:換行。
  \r:回車,也就是Enter鍵。
  \t:水平輸出退格鍵,也就是Tab鍵
  \v:垂直輸出退格鍵,也就是Tab鍵。

練習(xí),使用如下文本:

IDName Python  LinuxMySQLJava
1 Tangs88878685.55
2 Sunwk99989796,66
3 Zhubj77767574.44
4 Shahs66656463.33

執(zhí)行printf命令:

[root@localhost tmp]# printf '%s' $(cat student.txt)

說明:printf命令后是沒有辦法直接寫參數(shù)的,也就是不能直接加文件名來讀取文件的內(nèi)容,printf命令支持的是其他命令結(jié)果的輸出,交給printf命令來處理。所以說printf命令很少單獨(dú)使用,一般都放在AWK當(dāng)中來使用,這樣更加合理,否則就和上邊一樣,看起來很難受。

結(jié)果:

[root@localhost tmp]# printf '%s' $(cat student.txt)
IDNamePythonLinuxMySQLJava1Tangs88878685.552Sunwk99989796,663Zhubj77767574.444Shahs66656463.33[root@192 tmp]#

我們可以看到上面的結(jié)果非常的爛,他是把所有的內(nèi)容一個(gè)字符緊接著一個(gè)字符的輸出,中間沒有空格或者回車。

這就是printf命令,如果不指定輸出的格式,則會(huì)把所有輸出內(nèi)容連在一起輸出。其實(shí)文本的輸出本身就是這樣的,cat等文本輸出命令之所以可以按照漂亮的格式輸出,那是因?yàn)?code>cat命令已經(jīng)設(shè)定了輸出格式。

那么為了讓printf輸出合理的格式,就需要手動(dòng)自定義自己需要的格式。

printf '%s\t %s\t %s\t %s\t %s\t %s\t \n' $(cat student.txt)

說明:就是輸出一個(gè)字符串(%s),后邊加上一個(gè)制表符(tab鍵)隔開(\t),這樣一共有6列,寫6個(gè)%s\t,然后每一行最后加上一個(gè)回車(\n)。

執(zhí)行命令結(jié)果如下:

[root@localhost tmp]# printf '%s\t %s\t %s\t %s\t %s\t %s\t \n' $(cat student.txt)
IDName Python Linux MySQL Java
1 Tangs 88878685.55
2 Sunwk 99989796.66
3 Zhubj 77767574.44
4 Shahs 66656463.33

注意:'%s\t %s\t %s\t %s\t %s\t %s\t \n'中的空格是沒有意思的,寫多少都行,只是方便自己看,printf命令,只認(rèn)\n、 \t等輸出格式。

如果不想把成績當(dāng)成字符串輸出,而是按照整型和浮點(diǎn)型輸出,執(zhí)行如下命令:

[root@192 tmp]# printf '%i\t %s\t %i\t %i\t %i\t %8.2f\t \n' $(cat student.txt | grep -v "Name")
1 Tangs  88  87  86  85.55
2 Sunwk  99  98  97  96.66
3 Zhubj  77  76  75  74.44
4 Shahs  66  65  64  63.33

這個(gè)例子不是很好,但一定要把標(biāo)題顧慮掉,否則會(huì)出現(xiàn)如下效果,標(biāo)題都被變成了整型數(shù)據(jù)。

[root@localhost tmp]# printf '%i\t %s\t %i\t %i\t %i\t %8.2f\t \n' $(cat student.txt)
-bash: printf: ID: invalid number
-bash: printf: Python: invalid number
-bash: printf: Linux: invalid number
-bash: printf: MySQL: invalid number
-bash: printf: Java: invalid number
0 Name 000 0.00
1 Tangs88  87  86  85.55
2 Sunwk99  98  97  96.66
3 Zhubj77  76  75  74.44
4 Shahs66  65  64  63.33

2、AWK的基本使用

(1)AWK命令說明

[root@localhost ~]# awk '條件1{動(dòng)作1} 條件2{動(dòng)作2} ...' 文件名
條件(Pattern):
  一般使用關(guān)系表達(dá)式作為條件。這些關(guān)系表達(dá)式非常多,具體看下面一點(diǎn)。
  簡單舉例:
 x>10:判斷變量x是否大于10。
 x==y:判斷變量x是否等于變量y 。
 A~B:判斷字符串A中是否包含能匹配B表達(dá)式的子字符串。
 A!~B:判斷字符串A中是否不包含能匹配B表達(dá)式的子字符串。
動(dòng)作(Action):
  格式化輸出。
  流程控制語句。

提示:先判斷條件是否成立,在進(jìn)行對(duì)應(yīng)動(dòng)作??梢詻]有條件直接寫動(dòng)作,如果沒有條件,則直接執(zhí)行動(dòng)作。

(2)AWK命令使用

1)基本使用

使用如下文本:

IDName Python  LinuxMySQLJava
1 Tangs88878685.55
2 Sunwk99989796,66
3 Zhubj77767574.44
4 Shahs66656463.33

執(zhí)行命令:

awk '{printf $2 "\t" $3 "\t" $6 "\t" "\n"}' student.txt

結(jié)果:

[root@localhost tmp]# awk '{printf $2 "\t" $3 "\t" $6 "\t" "\n"}' student.txt
Name Python Java
Tangs 8885.55
Sunwk 9996.66
Zhubj 7774.44
Shahs 6663.33

說明:

  • AWK的動(dòng)作條件是需要用單引號(hào)括起來的,所以在動(dòng)作條件中的printf命令中定義的輸出格式時(shí),單引號(hào)就需要改換成雙引號(hào)了,這里要注意。
  • 沒有條件就是每一行都處理。
  • AWK的主要?jiǎng)幼骶褪怯?code>printf命令來輸出的。
  • AWK中可以直接添加文本文件,來獲取文件中所需內(nèi)容。

這里在補(bǔ)充一下print命令和printf命令用法差不多,print命令自帶換行符,但是Linux系統(tǒng)不支持print命令。

# 使用`print`命令就不需要加上\n換行符了。
[root@localhost tmp]# awk '{print $2 "\t" $3 "\t" $6 "\t"}' student.txt
Name Python  Java
Tangs8885.55
Sunwk9996.66
Zhubj7774.44
Shahs6663.33

2)處理分隔符是空格的情況

看磁盤情況的df命令的結(jié)果中,數(shù)據(jù)之間的分隔符是空格,用cut命令是處理不了的。

如下:

# 查看磁盤情況
[root@localhost tmp]# df -h
FilesystemSize  Used Avail Use% Mounted on
/dev/sda3  19G  2.1G16G  12% /
tmpfs  491M  0  491M0% /dev/shm
/dev/sda1 240M34M  194M  15% /boot
# 獲取第二列信息
[root@localhost tmp]# df -h | cut -f 2
FilesystemSize  Used Avail Use% Mounted on
/dev/sda3  19G  2.1G16G  12% /
tmpfs  491M  0  491M0% /dev/shm
/dev/sda1 240M34M  194M  15% /boot

使用AWK解決需求,獲取磁盤情況的第1列和第5列的信息。

[root@localhost tmp]# df -h | awk '{printf $1 "\t" $5 "\t" "\n"}'
Filesystem  Use%
/dev/sda312%
tmpfs 0%
/dev/sda115%

3)綜合練習(xí)

獲取下面信息中根分區(qū)的占有率12。

[root@localhost tmp]# df -h
FilesystemSize  Used Avail Use% Mounted on
/dev/sda3  19G  2.1G16G  12% /
tmpfs  491M  0  491M0% /dev/shm
/dev/sda1 240M34M  194M  15% /boot

執(zhí)行命令:

[root@localhost tmp]# df -h | grep "dev/sda3" | awk '{print $5}' | cut -d "%" -f 1
12

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

海外穩(wěn)定服務(wù)器

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部