国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Linux:“awk”命令的妙用

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

點擊上方“IT那活兒”,關注后了解更多精彩內容!!!



基本用法


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

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

test.txt的文件內容如下
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. 舉幾個簡單的小需求
例1 只顯示/etc/test.txt的賬戶:
awk -F : { print $1 } /etc/test.txt

## 輸出為
root
bin
daemon
adm
lp
例2 示/etc/test.txt的第1列和第7列,用逗號分隔顯示,所有行開始前添加列名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語句在所有文本處理動作執(zhí)行之前被執(zhí)行,END在所有文本處理動作執(zhí)行之后被執(zhí)行。

例3 統(tǒng)計/etc/test.txt文件中,每行的行號,每行的列數,對應的完整行內容:
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



高級用法


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

輸出字符串的長度:


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

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


awk條件操作符:

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

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

root
-
daemon
-
lp



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



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

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129715.html

相關文章

  • AWK使用簡介

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

    caikeal 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<