filename文件内容为一下内容
[root@server1 ~]# cat filename
+ 0.1 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 - 0.1 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 + 0.108 4 0 cbr 1000 ------- 2 4.0 5.0 1 1 - 0.108 4 0 cbr 1000 ------- 2 4.0 5.0 1 1 r 0.115333 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 + 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0 - 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0 + 0.116 4 0 cbr 1000 ------- 2 4.0 5.0 2 2 - 0.116 4 0 cbr 1000 ------- 2 4.0 5.0 2 2 r 0.123333 4 0 cbr 1000 ------- 2 4.0 5.0 1 1 [root@server1 ~]# awk '/^(+|-)/' filename #显示以+或者-号开头的行 [root@server1 ~]# awk '/^[+-]/' filename 这样也可以显示和前面一样的效果 + 0.1 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 - 0.1 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 + 0.108 4 0 cbr 1000 ------- 2 4.0 5.0 1 1 - 0.108 4 0 cbr 1000 ------- 2 4.0 5.0 1 1 + 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0 - 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0 + 0.116 4 0 cbr 1000 ------- 2 4.0 5.0 2 2 - 0.116 4 0 cbr 1000 ------- 2 4.0 5.0 2 2[root@server1 ~]# awk '/0$/' filename #显示以0结尾的行# awk '$NF ~ /0/' filename效果和前面的一样
+ 0.1 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 - 0.1 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 r 0.115333 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 + 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0 - 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0 [root@server1 ~]# awk '$2 ~ /0.115333/' filename #显示第二条记录中含有0.115333的行 r 0.115333 4 0 cbr 1000 ------- 2 4.0 5.0 0 0 + 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0 - 0.115333 0 1 cbr 1000 ------- 2 4.0 5.0 0 0[root@server1 ~]# awk 'BEGIN{OFS="%"}{print $1,$2}' filename # filename 通过设置输出分隔符(OFS="%")修改输出格式。
+%0.1 -%0.1 +%0.108 -%0.108 r%0.115333 +%0.115333 -%0.115333 +%0.116 -%0.116 r%0.123333[root@server1 ~]# awk 'BEGIN {"date"|getline d; print d}' #通过管道把date的执行结果送给getline,并赋给变量d,然后打印。
Tue Dec 10 22:22:26 CST 2013awk可以使用自身变量NR和FNR来处理多个文件。
NR:表示awk开始执行程序后所读取的数据行数。
FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。
[root@server1 ceshi]# awk '{print NR $0}' file1 file2 #对于NR,读取不同文件,NR是一直++的。
1file1 2file1 3file1 4file1 5file1 6file2 7file2 8file2 9file2 10file2 11file2[root@server1 ceshi]# awk '{print FNR $0}' file1 file2 #但是对于FNR,读取不同文件,开始下一个文件的时候FNR又从1开始了。
1file1 2file1 3file1 4file1 5file1 1file2 2file2 3file2 4file2 5file2 6file2