成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Linux:“awk”命令的妙用

IT那活兒 / 2302人閱讀
Linux:“awk”命令的妙用

點(diǎn)擊上方“IT那活兒”,關(guān)注后了解更多精彩內(nèi)容?。?!



基本用法


awk是一個(gè)強(qiáng)大的文本分析工具,簡單來說awk就是把文件逐行讀入,(空格,制表符)為默認(rèn)分隔符將每行切片,切開的部分再進(jìn)行各種分析處理。
1. awk命令格式
awk [-F 分隔符] commands file(s)
[-F 分隔符]是可選的,因?yàn)閍wk使用空格,制表符作為缺省的字段分隔符,因此如果要瀏覽字段間有空格,制表符的文本,不必指定這個(gè)選項(xiàng),但如果要瀏覽諸如/etc/test.txt文件,此文件各字段以冒號(hào)作為分隔符,則必須指明-F選項(xiàng)。
echo "this is a test" | awk { print $0 }
## 輸出為
this is a test
awk會(huì)根據(jù)分隔符將行分成若干個(gè)字段,$0為整行,$1為第一個(gè)字段,$2 為第2個(gè)地段,依此類推…
為打印一個(gè)字段或所有字段,使用print命令。這是一個(gè)awk動(dòng)作。
echo "this is a test" | awk { print $1 }
## 輸出為
this

echo "this is a test" |
 awk { print $1, $2 }
## 輸出為
this is

test.txt的文件內(nèi)容如下
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
2. 舉幾個(gè)簡單的小需求
例1 只顯示/etc/test.txt的賬戶:
awk -F : { print $1 } /etc/test.txt

## 輸出為
root
bin
daemon
adm
lp
例2 示/etc/test.txt的第1列和第7列,用逗號(hào)分隔顯示,所有行開始前添加列名start1,start7,最后一行添加,end1,end7。
awk -F : BEGIN {print "start1,start7"} {print $1 "," $7} END {print "end1,end7"} /etc/test.txt

## 輸出為
start1,start7
root,/bin/bash
bin,/sbin/nologin
daemon,/sbin/nologin
adm,/sbin/nologin
lp,/sbin/nologin
end1,end7


BEGIN語句在所有文本處理動(dòng)作執(zhí)行之前被執(zhí)行,END在所有文本處理動(dòng)作執(zhí)行之后被執(zhí)行。

例3 統(tǒng)計(jì)/etc/test.txt文件中,每行的行號(hào),每行的列數(shù),對(duì)應(yīng)的完整行內(nèi)容:
awk -F : { print NR " " NF " " $0 } /etc/test.txt

## 輸出為
1    7   root:x:0:0:root:/root:/bin/bash
2    7   bin:x:1:1:bin:/bin:/sbin/nologin
3    7   daemon:x:2:2:daemon:/sbin:/sbin/nologin
4    7   adm:x:3:4:adm:/var/adm:/sbin/nologin
5    7   lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin



高級(jí)用法


1. 支持內(nèi)置變量
常用內(nèi)置變量:
  • $n  當(dāng)前記錄的第n個(gè)字段,字段間由FS分隔
  • $0  完整的輸入記錄
  • FILENAME  當(dāng)前文件名
  • FNR 各文件分別計(jì)數(shù)的行號(hào)
  • FS 字段分隔符(默認(rèn)是任何空格)
  • NF 一條記錄的字段的數(shù)目
  • NR 已經(jīng)讀出的記錄數(shù),就是行號(hào),從1開始
  • OFS 輸出字段分隔符,默認(rèn)值與輸入字段分隔符一致。
  • ORS 輸出記錄分隔符(默認(rèn)值是一個(gè)換行符)
  • RS 記錄分隔符(默認(rèn)是一個(gè)換行符)
2.  支持函數(shù)

輸出字符串的長度:


awk BEGIN { print length("this is a text") }
## 輸出為
14
將/etc/test.txt的用戶名變成大寫輸出:
awk -F : { print toupper($1) } /etc/test.txt
## 輸出為

ROOT
BIN
DAEMON
ADM
LP


3. 常用函數(shù)
  • toupper(s)返回s的大寫
  • tolower(s) 返回s的小寫
  • length(s) 返回s長度
  • substr(s,p) 返回字符串s中從p開始的后綴部分
4. 支持條件操作,正則表達(dá)式匹配
顯示/etc/test.txt中有daemon的行:
awk -F : $0 ~ /daemon/ /etc/test.txt
## 輸出為

daemon:x:2:2:daemon:/sbin:/sbin/nologin


awk條件操作符:

< 、< = 、 == 、 != 、 ~ 匹配正則表達(dá)式 、!~ 不匹配正則表達(dá)式。
5. 支持流程控制語句,類C語言
if while do/while for break continue
輸出第一個(gè)字段的第一個(gè)字符大于d的行:
awk -F : { if ($1 > "d") { print $1 } else { print "-" } } /etc/test.txt
## 輸出為

root
-
daemon
-
lp
可以把流程控制語句放到一個(gè)腳本中,然后調(diào)用腳本執(zhí)行,如test.sh的內(nèi)容如下:
{
if ($1 > "d") {
print $1
} else {
print "-"
}
}
用如下方式執(zhí)行,效果一樣:
awk -F : -f test.sh /etc/test.txt
## 輸出為

root
-
daemon
-
lp



本 文 原 創(chuàng) 來 源:IT那活兒微信公眾號(hào)(上海新炬王翦團(tuán)隊(duì))



文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/129715.html

相關(guān)文章

  • AWK使用簡介

    摘要:一簡介如何展示文本內(nèi)容,不在于修改文件,同樣也是一行一行讀入文件格式選項(xiàng)指明輸入時(shí)用到的字段分隔符自定義變量模式匹配到相應(yīng)的行,不標(biāo)注時(shí)匹配整個(gè)文件匹配到匹配的行時(shí),所要做的動(dòng)作。 一:簡介 如何展示文本內(nèi)容,不在于修改文件,同樣也是一行一行讀入文件格式: awk [options] ‘program’ file option選項(xiàng): -F 指明輸入時(shí)用到的字段分隔符 -v ...

    caikeal 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<