天天看點

linux下awk内置函數的使用(split/substr/length)

一、split 初始化和類型強制 

       awk的内建函數split允許你把一個字元串分隔為單詞并存儲在數組中。你可以自己定義域分隔符或者使用現在FS(域分隔符)的值。

格式:

   split (string, array, field separator)

   split (string, array)  -->如果第三個參數沒有提供,awk就預設使用目前FS值。

例子:

例1:替換分隔符

1

2

3

time=

"12:34:56"

out=`echo

$time

| awk

'{split($0,a,":");print a[1],a[2],a[3]}'

`

echo

$out

 例2:計算指定範圍内的和(計算每個人1月份的工資之和)

4

5

6

7

8

9

10

[root

@test

~]

# cat test.txt

Tom   

2012

-

12

-

11

car    

53000

John  

2013

-

01

-

13

bike   

41000

vivi   

2013

-

01

-

18

car    

42800

Tom   

2013

-

01

-

20

car    

32500

John  

2013

-

01

-

28

bike   

63500

[root

@test

~]

# awk '{split($2,a,"-");if(a[2]==01){b[$1]+=$4}}END{for(i in b)print i,b[i]}' test.txt  

vivi

2800

Tom2500

John4500

 二、substr 截取字元串

        傳回從起始位置起,指定長度之子字元串;若未指定長度,則傳回從起始位置到字元串末尾的子字元串。

  substr(s,p) 傳回字元串s中從p開始的字尾部分

  substr(s,p,n) 傳回字元串s中從p開始長度為n的字尾部分

[root

@test

~]

# echo "123" | awk '{print substr($0,1,1)}'

1

解釋:

awk -F ',' '{print substr($3,6)}'    --->  表示是從第3個字段裡的第6個字元開始,一直到設定的分隔符","結束.

substr($3,10,8)  --->  表示是從第3個字段裡的第10個字元開始,截取8個字元結束.

substr($3,6)     --->  表示是從第3個字段裡的第6個字元開始,一直到結尾

三、length 字元串長度

   length函數傳回沒有參數的字元串的長度。length函數傳回整個記錄中的字元數。

[root

@test

~]

# echo "123" | awk '{print length}'

3

-----------------------------------------------------------------------------------------

awk的字元串函數substr

substr(s,p) 傳回字元串s中從p開始的字尾部分

substr(s,p,n) 傳回字元串s中從p開始長度為n的字尾部分

執行個體操作

繼續閱讀