awk之7 常用函数的解析

1.区域获取

substr(区域f,起始位置n1,获取范围n2)

解析:获取某个区域f内,从起始位置n1开始算起的n2个字符组成的字符串.如果n2不存在,则返回从n1开始到区域结束的内容.

例子:获取某个文件的类型属性

ll filename | awk '{print substr($1,1,1)}' 

$1标示文件的权限区域,第一个数字1标示权限区域的首位,第二个数字1标示获取从首位开始的第一个字符.即类型.

awk的substr函数是从1开始计数


其他类似获取方法:变量的特殊使用.
解析:获取变量n1位置开始算起的n2个字符组成的字符串.${变量名:起始位置n1:获取范围n2}

例子:fd=$(ll filename);echo ${fd:0:1}

变量的获取是从0开始计数


2.区域替换

gsub(/匹配的正则r/,"替换后的字符串s",区域f)

解析:在区域f(若无,则默认是$0)内,将利用正则r匹配到的内容,替换为s

正则表达式,必须用//括起来

如果s是数字,则无需双引号,如果是字符串,必须用引号.

例子:

#echo $fd | awk '{gsub(/^test/,"test1",$NF);print $NF}'

test1.py

#echo $fd

-rwxr--r-- 1 root root 64 5月 6 14:40 test.py


其他类似获取方法:sed的替换

#echo $fd | sed 's/test/test1/'


sed无法将修改限定在某个区域

例如:替换第二个test为abcd

#echo "test1;test2" | sed '/test2/{s/test/abcd/}'

abcd1;test2

但是可以用awk限定仅修改第二个,例如:

#echo "test1;test2" | awk 'BEGIN{FS=";";OFS=";"}{gsub(/test/,"abcd",$2);print $0}'

test1;abcd2


3.获取字符串位置

index("范围字符串s1"或者区域字段f,"需要定位的字符串s2")

解析:在区域f或者字符串s1中,查找字符串s2的起始位置,如果找不到,返回0

例子:

# echo "12345678" | awk '{print index($0,"5")}'

5


4.获取字符串的长度

length("字符串"或区域f)

解析:返回字符串或者区域f的长度,如果不写,则返回$0长度

例子:

# echo "123 123 1234" | awk '{print length($3)}'

4

# echo "123 123 1234" | awk '{print length()}'

12


5.分割字符串形成数组

split("待分割的字符串s",数组a,分隔符r)

解析:用默认FS或者r将字符串s进行分割,然后形成以数字为下标的数组a,下标从1开始.

例子:

root@aaa103439-pc:~# cat test

a1a d2e a3a

b1b d2e b3b

c1c d2e c3c

root@aaa103439-pc:~# awk '{split($1,a,/1/);split($2,b,/2/);split($3,c,/3/);print a[1],b[1],c[1]}' test

a d a

b d b

c d c











[星空刺] |-->一颗星辰一闪即逝,支撑它的唯有方向和目的
原文地址:https://www.cnblogs.com/aaa103439/p/fbb4593582648a8c0000000000000000.html