linux shell sed awk 命令(2)-awk

linux shell sed awk 命令(2)-awklinux


awk語法格式:正則表達式

awk [選項] -f program-file [ -- ] file ...shell

選項:ide

-F fs, --field-separator fs函數

制定以fs做爲輸入行的分隔符(默認分隔符爲空格或製表符)命令行


-v var=val, --assign var=val文檔

在執行過程之前,設置一個var值爲valget


-f program-file, --file program-fileit

從腳本文件中讀取awk指令,以取代在命令參數中輸入處理腳本io


-W compat, -W copyright, --compat, --traditional

使用兼容模式運行awk,GUN擴展選項將被忽略


-W dump-variables[=file], --dump-variables[=file]

打印全局變量(變量,類型,值)到文件中,若是沒有提供文件名,則自動輸出至名爲dump-variables文件中


awk -W dump-variables=out.txt 'x=1 {print x}' test.txt



eg:

1.經過正則表達式/^$/匹配空白行

awk '/^$/ {print "Blank line"}' eth0

2.打印包含主機名的行,沒有指定動做指令.默認動做爲打印

awk '/HOSTNAME/' /etc/sysconfig/network

3.指定腳本-f

(1)awk.sh內容以下:

/^$/ {print "Blank line"}

(2) awk -f awk.sh eth0

Blank line

Blank line

Blank line

Blank line

Blank line


記錄與字段

echo hello world abc | awk '{print $1,$2,$3}'

hello world abc


echo hello world abc | awk '{print $0}'

hello world abc


echo hello world abc | awk '{print NF}'


echo hello world abc | awk '{print $NF}'

abc


字段分隔符

awk -F:  '{print $1}' /etc/passwd

awk 'BEGIN {FS=":"} {print $1}' passwd


//指定多個分隔符

echo 'hello the:world,!' | awk 'BEGIN {FS="[:, ]"} {print $1,$2,$3,$4}'


內置變量

ARGC    命令行參數

FILENAME    當前輸入文檔名稱

FNR        當前輸入文檔

NR        輸入流的當前記錄編號

NF        當前記錄字段數

FS        字符分割符

OFS        輸出字段分隔符,默認空格

ORS        輸出記錄分隔符,默認爲換行符\n

RS            輸入記錄分隔符,默認爲換行符\n


表達式與操做符

四則運算 + - * /

% 取餘    ^    冪運算 

自加自減

++ --


~匹配 !~不匹配



echo "test" | awk 'x=2 {print x+3}'

awk -F: '$1~/root/ {print $3}' /etc/passwd   //打印root的ID號

awk -F: '$3>500 {print $1}' /etc/passwd //列出ID號大於500的用戶名


 

awk語法規則


if (表達式)

動做

else 

動做


if (表達式) 動做;else 動做


eg:

//判讀sda4容量小於20MB時報警,不然顯示ok

df -h | grep "sda4"  | awk '{if ($4<20000) print "Alart"; else print "OK"}'

 

while (條件)

動做


語法格式:

x=1

while (i<9) {

    print $i

}


eg:

awk 'i=1 {} BEGIN { while (i<=10) { ++i; print i}}' test


do

動做

while (條件)


eg:

awk 'BEGIN { do {++x;print x} while (x<=10) }' test


for ( 變量; 條件; 計數器)

    動做


eg:

 awk 'BEGIN {for (i=1;i<=10;i++) print i}'


函數

1.rand()

 awk 'BEGIN {print rand(); srand();print srand()}'


2.gsub(x,y,z),sub(x,y,z)


awk -F: 'gsub(/root/,"rockycai",$0) {print $0}' /etc/passwd   //全局替換

awk -F: 'sub(/root/,"rockycai",$0) {print $0}' /etc/passwd        //局部替換


3.length(z)

awk '{print length()}' /etc/passwd  //顯示passwd每行長度


4.getline

df -h | awk 'BEGIN {print "Disk Free:"}{if(NF==1) {getline;print $3};if(NF==6) print $4}'

相關文章
相關標籤/搜索