awk

awk


格式:

awk [-F separator] 'command' input-file

说明:

[ -F域分隔符]是可选的,如果设置了-F选项,则awk每次读一条记录或一行,并使用指定的分隔符分隔指定域,但如果未设置-F选项,awk假定空格为域分隔符,这个读进程将持续到文件尾或文件不再存在


任何awk语句都由模式和动作组成。在一个awk脚本中可能有许多语句。模式部分决定动作语句何时触发及触发事件。处理即对数据进行的操作。如果省略模式部分,动作将时刻保持执行状态。


模式可以是任何条件语句或复合语句或正则表达式,模式包括两个特殊字段BEGIN和END,如果不特别指明模式,awk总是匹配或打印行数

动作在大括号{ }内指明。动作大多数用来打印

awk执行时,其浏览域标记为$1,$2 . . . $n。这种方法称为域标识。使用$0,意即所有域。


语法:

匹配正则表达式,使用符号‘~’后紧跟正则表达式  

/abc/ -- 包含abc的字符串


内置变量:

awk内置变量

ARGC 命令行参数个数

ARGV 命令行参数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行- F选项

NF 浏览记录的域个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符


分号用于分隔awk命令。

当在awk中修改任何域时,重要的一点是要记住实际输入文件是不可修改的,修改的只是保存在缓存里的awk副本


排错技巧:

在碰到awk错误时,可相应查找:

确保整个awk命令用单引号括起来。

确保命令内所有引号成对出现。

确保用花括号括起动作语句,用圆括号括起条件语句。

可能忘记使用花括号,也许你认为没有必要,但awk不这样认为,将按之解释语法。


例子:

打印指定的域

#echo "tt kk ww" |awk '{print $2}'

#kk


打印总共有几个域

#echo "sym_patch -> 5.7p2rc9/SFSFS-patch-5.7P2_rc9_2012_04_25.tar.gz"|awk -F'->' '{print NF}'

#2


打印最后一个域

# echo "sym_patch -> 5.7p2rc9/SFSFS-patch-5.7P2_rc9_2012_04_25.tar.gz"|awk -F '->' '{print $NF}'

#5.7p2rc9/SFSFS-patch-5.7P2_rc9_2012_04_25.tar.gz



打印倒数第2个域

#echo "tt kk ww" |awk '{print $(NF-1)}'

#kk


条件语句

awk '{if($1 == "pl" && $3=="'$vol'"){print $2,$4,$7}}'


变量的引用--外层双引号,内层单引号

# pp="555"

#echo "444" | awk '{print "'$pp'"}'

或#echo "444" | awk '{print "'${pp}'"}'

#555


你可能感兴趣的:(linux命令)