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

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

 更新時間:2022年06月08日 11:24:34   作者:繁華似錦Fighting  
AWK可以看成一門獨立的語言,它擁有語言的基本特征,換句話說AWK可以寫出極其繁瑣和復雜的程序,AWK的語法比Shell的語法還難以接收,這篇文章主要介紹了Shell?AWK編程的介紹和基本使用,需要的朋友可以參考下

1、AWK介紹

(1)AWK概述

AWK是一種處理文本文件的語言,是一個強大的文本分析工具。

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

當用AWK處理需求遠要比Shell處理簡單的多的時候,我們就用AWK來解決。

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

(2)printf格式化輸出

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

AWK的標準輸出支持print命令和printf命令,這兩個命令在AWK當中基本作用是一樣的,但是Linux命令中只支持printf命令,如下:

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

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

(3)printf命令說明

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

練習,使用如下文本:

ID      Name    Python  Linux   MySQL   Java
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

執(zhí)行printf命令:

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

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

結果:

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

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

這就是printf命令,如果不指定輸出的格式,則會把所有輸出內容連在一起輸出。其實文本的輸出本身就是這樣的,cat等文本輸出命令之所以可以按照漂亮的格式輸出,那是因為cat命令已經設定了輸出格式。

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

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

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

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

[root@localhost tmp]# printf '%s\t %s\t %s\t %s\t %s\t %s\t \n' $(cat student.txt)
ID      Name    Python  Linux   MySQL   Java
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

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

如果不想把成績當成字符串輸出,而是按照整型和浮點型輸出,執(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

這個例子不是很好,但一定要把標題顧慮掉,否則會出現如下效果,標題都被變成了整型數據。

[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    0   0   0       0.00
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

2、AWK的基本使用

(1)AWK命令說明

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

動作(Action):
  格式化輸出。
  流程控制語句。

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

(2)AWK命令使用

1)基本使用

使用如下文本:

ID      Name    Python  Linux   MySQL   Java
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

執(zhí)行命令:

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

結果:

[root@localhost tmp]# awk '{printf $2 "\t" $3 "\t" $6 "\t" "\n"}' student.txt
Name    Python  Java
Tangs   88      85.55
Sunwk   99      96.66
Zhubj   77      74.44
Shahs   66      63.33

說明:

  • AWK的動作條件是需要用單引號括起來的,所以在動作條件中的printf命令中定義的輸出格式時,單引號就需要改換成雙引號了,這里要注意。
  • 沒有條件就是每一行都處理。
  • AWK的主要動作就是用printf命令來輸出的。
  • AWK中可以直接添加文本文件,來獲取文件中所需內容。

這里在補充一下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
Tangs   88      85.55
Sunwk   99      96.66
Zhubj   77      74.44
Shahs   66      63.33

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

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

如下:

# 查看磁盤情況
[root@localhost tmp]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  2.1G   16G  12% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       240M   34M  194M  15% /boot

# 獲取第二列信息
[root@localhost tmp]# df -h | cut -f 2
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  2.1G   16G  12% /
tmpfs           491M     0  491M   0% /dev/shm
/dev/sda1       240M   34M  194M  15% /boot

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

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

3)綜合練習

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

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

執(zhí)行命令:

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

到此這篇關于Shell AWK編程的基本介紹和使用詳解的文章就介紹到這了,更多相關Shell AWK使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • shell腳本實現ftp上傳下載文件功能

    shell腳本實現ftp上傳下載文件功能

    這篇文章主要介紹了shell腳本實現ftp上傳下載文件功能,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-08-08
  • LINUX下的流量監(jiān)控shell腳本

    LINUX下的流量監(jiān)控shell腳本

    這篇文章主要介紹了LINUX下的流量監(jiān)控shell腳本,可以適用任何Linux版本,需要的朋友可以參考下
    2014-04-04
  • 使用Linux的alternatives命令替換選擇軟件的版本方法

    使用Linux的alternatives命令替換選擇軟件的版本方法

    下面小編就為大家?guī)硪黄褂肔inux的alternatives命令替換選擇軟件的版本方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • shell Bash的數組與關聯數組的實現

    shell Bash的數組與關聯數組的實現

    本文主要介紹了shell Bash的數組與關聯數組的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Shell腳本實現C語言代碼行數統(tǒng)計

    Shell腳本實現C語言代碼行數統(tǒng)計

    這篇文章主要介紹了Shell腳本實現C語言代碼行數統(tǒng)計,本文直接給出實現代碼,需要的朋友可以參考下
    2015-05-05
  • Nginx和PHP-FPM的啟動、重啟、停止腳本分享

    Nginx和PHP-FPM的啟動、重啟、停止腳本分享

    這篇文章主要介紹了Nginx和PHP-FPM的啟動、重啟、停止腳本分享,腳本中包含start、stop、reload、restart等常用的管理方法,并可以加入系統(tǒng)服務然后使用servicem命令管理,需要的朋友可以參考下
    2014-12-12
  • CentOS 6.0 啟動時出現fstab錯誤時的修復方法

    CentOS 6.0 啟動時出現fstab錯誤時的修復方法

    下面小編就為大家?guī)硪黄狢entOS 6.0 啟動時出現fstab錯誤時的修復方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 詳解bash中的退出狀態(tài)機制

    詳解bash中的退出狀態(tài)機制

    這篇文章主要介紹了詳解bash中的退出狀態(tài)機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Shell腳本實現的猜數字小游戲

    Shell腳本實現的猜數字小游戲

    這篇文章主要介紹了Shell腳本實現的猜數字小游戲,本文的猜數字規(guī)則相對一般規(guī)則的猜數字可能難度要大不少,需要的朋友可以參考下
    2014-12-12
  • Linux進程管理方法介紹

    Linux進程管理方法介紹

    這篇文章介紹了Linux進程管理的方法,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06

最新評論

桐乡市| 石首市| 灵宝市| 宁城县| 若羌县| 黄冈市| 沂源县| 台安县| 称多县| 收藏| 噶尔县| 崇明县| 宁德市| 天水市| 拜城县| 饶河县| 鄂托克前旗| 鄂尔多斯市| 昌平区| 永寿县| 楚雄市| 阜阳市| 石城县| 宣恩县| 天祝| 大竹县| 科尔| 漠河县| 林西县| 登封市| 蕉岭县| 收藏| 游戏| 汝州市| 扎赉特旗| 曲阳县| 迁安市| 衡山县| 黄平县| 赤壁市| 佛学|