awk命令行的程序模型
awk [-F field-separator] 'commands' input-file(s)-F 指定域分隔符,可选,默认为空格。
commands的命令格式为:/pattern/{actions}
condition{actions}pattern
是正则表达式,actions
是一系列操作。
awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满足
condition
条件,
则执行相应的actions
,如果一条awk
命令只有actions
部分,则actions
作用于待处理文件的每一行。
例:
testfile文件内容为
ProductA 30 aaa
ProductB 76 bbb
ProductC 55 ccc
打印每一行的第二列:$ awk '{print $2;}' testfile 30 76 55 |
$1
、$2
分别表示第一列、第二列等,类似于Shell脚本的位置参数,而$0
表示整个当前行。$ awk '$2<75 {printf "%s\t%s\n", $0, "REORDER";} $2>=75 {print $0;}' testfile |
awk
命令的condition
部分还可以是两个特殊的condition
-BEGIN
和END
,对于每个待处理文件,BEGIN
后面的actions
在处理整个文件之前执行一次,END
后面的actions
在整个文件处理完之后执行一次。awk 'BEGIN {print "name belt -----"}{print $1" "$3} END {print "end"}' testfile name belt ----- ProductA aaa ProductB bbb ProductC ccc end
ps: 注print与printf的区别 |
初次awk时,可能会经常出现错误,在碰到错误时,可以按以下方式查找:
!确保整个awk命令用单引号括起来
!确保命令内所有引号成对出现
!确保用花括号括起动作语句,用圆括号括起条件语句
!确保文件路径正确
awk有许多内置变量设置环境信息。这些变量可以被改变。下面是一些常用的内置变量。
ARGC 命令行参数个数 |
$ awk 'END {print NR}' testfile3
$ awk '{print NF} END {print FILENAME}' testfile
3
3
3
testfile
沒有留言:
張貼留言