linux学习之linux百问4,awk了解
2013-05-14 20:54
309 查看
1、awk sed以行为单位处理文件,
awk比
sed强的地方在于不仅能以行为单位还能以列为单位处理文件。
awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,但是行分隔符和列分隔符都可以自定义,比如
/etc/passwd文件的每一行有若干个字段,字段之间以
:分隔,就可以重新定义
awk的列分隔符为
:并以列为单位处理这个文件。
awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和循环结构,但是基本用法和
sed类似,
awk命令行的基本形式为:
awk option 'script' file1 file2 ... awk option -f scriptfile file1 file2 ...
和
sed一样,
awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以用
-f参数指定一个脚本文件,编辑命令的格式为:
/pattern/{actions} condition{actions}
和
sed类似,
pattern是正则表达式,
actions是一系列操作。
awk程序一行一行读出待处理文件,如果某一行与
pattern匹配,或者满足
condition条件,则执行相应的
actions,如果一条
awk命令只有
actions部分,则
actions作用于待处理文件的每一行。比如文件
testfile的内容表示某商店的库存量:
ProductA 30 ProductB 76 ProductC 55
打印每一行的第二列:
$ awk '{print $2;}' testfile 30 76 55
自动变量
$1、
$2分别表示第一列、第二列等,类似于Shell脚本的位置参数,而
$0表示整个当前行。再比如,如果某种产品的库存量低于75则在行末标注需要订货:
$ awk '$2<75 {printf "%s\t%s\n", $0, "REORDER";} $2>=75 {print $0;}' testfile ProductA 30 REORDER ProductB 76 ProductC 55 REORDER
可见
awk也有和C语言非常相似的
printf函数。
awk命令的
condition部分还可以是两个特殊的
condition-
BEGIN和
END,对于每个待处理文件,
BEGIN后面的
actions在处理整个文件之前执行一次,
END后面的
actions在整个文件处理完之后执行一次。
awk命令可以像C语言一样使用变量(但不需要定义变量),比如统计一个文件中的空行数
$ awk '/^ *$/ {x=x+1;} END {print x;}' testfile
就像Shell的环境变量一样,有些
awk变量是预定义的有特殊含义的:
awk常用的内建变量
FILENAME | 当前输入文件的文件名,该变量是只读的 |
NR | 当前行的行号,该变量是只读的,R代表record |
NF | 当前行所拥有的列数,该变量是只读的,F代表field |
OFS | 输出格式的列分隔符,缺省是空格 |
FS | 输入文件的列分融符,缺省是连续的空格和Tab |
ORS | 输出格式的行分隔符,缺省是换行符 |
RS | 输入文件的行分隔符,缺省是换行符 |
$ awk 'BEGIN {FS=":"} {print $1;}' /etc/passwd
awk还可以像C语言一样使用
if/
else、
while、
for控制结构,
相关文章推荐
- linux学习之linux百问3,sed了解
- 【方向学习】了解linux
- Linux-awk学习
- 轻松学习Linux之AWK使用初步
- linux学习之awk find
- 了解学习Linux的基本命令
- Linux命令学习:awk
- 学习Linux之前你需要了解的东东
- Linux学习笔记:awk详细用法
- Linux学习--第十一天--source、环境变量目录、欢迎信息、正则、cut、awk、sed、sort、判断表达式、if、for、case、一些脚本
- linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结
- linux学习笔记(18) - sed和awk
- linux学习:)---grep、awk、sed
- linux中awk学习小结
- 学习gnome-panel源码,了解linux gtk编程
- linux命令学习(1)-awk
- Linux学习笔记_基本命令复习(seq sed awk)
- Linux学习 - awk使用
- 最近学习的linux命令 grep,awk,cut,uniq,wc 实际应用例子