awk内置字符串函数 awk 格式化输出
i249 ~ # ps -efl|head -1|awk '$2~/S/{print $2}'
S
i249 ~ # ps -efl|awk '$2~/S/{print $2}'
S
S
S
S
printf
- 左对齐
Width 域的步长,用0表示0步长
.prec 最大字符串长度,或小数点右面的位数
%c ASCII字符
%d 整型
%e 科学计数法
%f 浮点型
%g awk决定哪种浮点数转换e或者f
%o 八进制
%s 字符串
%x 十六进制
例一:
i161 admin # df -Th|awk '{print $1,$5}'
Filesystem Avail
rootfs 23G
/dev/root 23G
tmpfs 16G
rc-svcdir 956K
cgroup_root 10M
udev 9.8M
shm 16G
/dev/md4 2.5T
i161 admin # df -Th|awk '{printf "%-15s %-15s\n",$1,$5}'
Filesystem Avail
rootfs 23G
/dev/root 23G
tmpfs 16G
rc-svcdir 956K
cgroup_root 10M
udev 9.8M
shm 16G
/dev/md4 2.5T
awk有许多强大的字符串函数
gsub(r,s) 在整个$0中,用s代替r
gsub(r,s,t) 在整个t中,用s代替r
index(s,t) 返回s中字符串t的第一位置
length(s) 返回s长度
match(s,r) 测试s是否包含匹配r的字符串
split(s,a,fs) 使用分隔符fs将字符串s划分为指定序列a
sprint(fmt,exp) 输出经过fmt格式化后的exp
substr(s,p) 返回字符串s中从p开始的后缀部分
substr(s,p,n) 返回字符串s中从p开始的长度为n的后缀部分
例一:
[root@localhost shell]# awk -F ":" 'gsub(/502/,213213213) {print$0}' passwd
test:x:213213213:213213213::/home/test:/bin/bash
[root@localhost shell]#
例二:
[root@localhost shell]# awk -F ":" 'gsub(/502/,213213213,$3) {print$0}' passwd
test x 213213213 502 /home/test /bin/bash
[root@localhost shell]#
例三:
[root@localhost shell]# awk 'BEGIN {print index("test","t")}' passwd
1
[root@localhost shell]#
例四:
[root@localhost shell]# awk -F ":" '{if($1=="test"){print$0,length($1)}}' passwd
test:x:502:502::/home/test:/bin/bash 4
[root@localhost shell]#
例五:
[root@localhost shell]# awk -F ":" '{if($1=="test") {print substr($1,1,3)}}' passwd
tes
[root@localhost shell]#
例六:
[root@localhost shell]# awk 'BEGIN {STR="a few good men"} END{print substr(STR,7)}' passwd
good men
[root@localhost shell]#
例七:
[root@localhost shell]# STR=test.txt
[root@localhost shell]# echo $STR
test.txt
[root@localhost shell]# echo $STR | awk '{print substr($0,1,4)}'
test
[root@localhost shell]# echo $STR | awk '{print substr($0,6)}'
txt