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"}' testfilename belt -----ProductA aaaProductB bbbProductC cccendps: 注print与printf的区别 |
初次awk时,可能会经常出现错误,在碰到错误时,可以按以下方式查找:
!确保整个awk命令用单引号括起来
!确保命令内所有引号成对出现
!确保用花括号括起动作语句,用圆括号括起条件语句
!确保文件路径正确
awk有许多内置变量设置环境信息。这些变量可以被改变。下面是一些常用的内置变量。
ARGC 命令行参数个数 |
$ awk 'END {print NR}' testfile3
$ awk '{print NF} END {print FILENAME}' testfile
3
3
3
testfile
沒有留言:
張貼留言