使用awk格式化输出文本(4)

1 2 a 5 6 11 b 55 66 21 22 23 c 25 26

写法如下:

cat test2.log | \ awk '{ for(i=1;i<=NF;i++){ if($i ~ /[a-z]/) { printf $i"\t" break } else printf $i"\t" } print "" }'

1.break 用法跟c语言用法一样,跳出for循环

5.awk中数组

如下文本test3.log,给定一个id值,输出其在所有id中是第几个

test1
id
=615187629 test2
test3
id=615183434 test4
id=615123789 test5
id=615975882

给定id值615123789,其在所有id中是第三个,计算如下:

cat test3.log | \ awk -v var1=615123789 -F [=] ' /id/ { b+=1 a[b]=$2 } END { for(i in a) if(a[i] == var1) print "number:",i } '

6.awk中的整数计算

如下文本,这是一个kvm虚拟机进程(省略了部分文本),我们要获取其映射到宿主机上的vnc端口号,即由"-vnc 0.0.0.0:1"字符串计算出其vnc端口号为5901(5900 + 1),若是"-vnc 0.0.0.0:2",则端口号为5902

cat kvm.txt
qemu 144148 4.7 4.2 ... /usr/local/qemu/bin/qemu-kvm -name lnmptest-107 ... -device isa-serial,chardev=charserial0,id=serial0 -vnc 0.0.0.0:1 -vga cirrus timestamp=on

实现有多种,sed,shell,awk都可以

#awk
cat kvm.txt
| awk '{ for(i=1;i<=NF;i++){if($i == "-vnc"){sub(/0.0.0.0:/,"",$(i+1));print $(i+1)+5900}} }'
#shell
cat kvm.txt | egrep -o "\-vnc [^ ]*" | awk -F: '{print $2+5900}'
#sed
cat kvm.txt | sed "s/^.* -vnc [0-9.]*:\([0-9]*\).*/\1+5900/g" | bc

Linux系统之文本格式化工具awk

AWK简介及使用实例

Linux awk文本分析工具

Linux文本处理工具之awk 

如何在Linux中使用awk命令

文本分析工具-awk 

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/15334.html