awk

来源:互联网 发布:惠东淘宝其他招聘网 编辑:程序博客网 时间:2024/05/16 05:09

awk

awk简介

  • 对文本和数据进行扫描和处理
  • 两个特殊模式:BEGIN 和 END
  • awk一次从文件读取一条记录,并将记录存储在字段变量$0中;记录被分割为字段存储在$1,$2,...,$NF(默认使用空格或制表符为分隔符)

  • 参数列表

-

POSIX options:          GNU long options: (standard)        -f progfile             --file=progfile        -F fs                   --field-separator=fs分隔符        -v var=val              --assign=var=val设置一个变量Short options:          GNU long options: (extensions)        -b                      --characters-as-bytes        -c                      --traditional        -C                      --copyright        -d[file]                --dump-variables[=file]        -e 'program-text'       --source='program-text'        -E file                 --exec=file        -g                      --gen-pot        -h                      --help        -L [fatal]              --lint[=fatal]        -n                      --non-decimal-data        -N                      --use-lc-numeric        -O                      --optimize        -p[file]                --profile[=file]        -P                      --posix        -r                      --re-interval        -S                      --sandbox        -t                      --lint-old        -V                      --version
  • 打印file文件中的空行并显示Blank line

-

[root@server6 ~]# awk '/^$/ {print "Blank line"}' fileBlank lineBlank lineBlank lineBlank lineBlank line
  • 打印主机名

-

[root@server6 ~]# awk '/HOSTNAME/' /etc/sysconfig/networkHOSTNAME=server6.example.com
  • 打印空格脚本式

-

[root@server6 ~]# awk -f awk.sh file Blank lineBlank lineBlank lineBlank lineBlank line[root@server6 ~]# cat awk.sh /^$/{print "Blank line"}[root@server6 ~]# cat file 12121211:1212121223232323:3223232334343433:43343434

-

# 打印第一条记录[root@server6 ~]# echo hello world|awk '{print $0}'hello world# 打印最后一个字段数[root@server6 ~]# echo hello world|awk '{print NF}'2# 打印最后一个字段[root@server6 ~]# echo hello world|awk '{print $NF}'world

-

# 以:划分,打印第一个字段[root@server6 ~]# awk 'BEGIN {FS=":"} {print $1}' passwdrootbindaemonadmlpsyncshutdownhaltmail

-

# 以:,划分,打印第一个字段和第二个字段[root@server6 ~]# echo 'hello the:world,!'|awk 'BEGIN{FS="[:,]"}{print $1,$2}'hello the world
  • 变量说明
变量名称描述argc命令行参数个数FILENAME当前输入文档的名称FNR当前输入文档的当前记录编号NR输入流的当前记录编号NF当前记录的字段个数FS字段分隔符OFS输出字段分隔符(默认空格)ORS输出记录分隔符(默认换行)RS输入记录分隔符(默认换行)

-

[root@server6 ~]# cat file1tian sheng wo cai bi you yongshao zhuang bu nu li,lao da tu shang bei [root@server6 ~]# cat file2ren sheng chu chu shi feng jingawk shi fei chang qiang da dechang feng po lang hui you shi 

-

# 打印行标[root@server6 ~]# awk '{print FNR}' file1 file212123[root@server6 ~]# awk '{print NR}' file1 file212345

-

# 打印每一行字段数[root@server6 ~]# awk '{print NF}' file1 79# 以:划分,取第一个字段[root@server6 ~]# awk 'BEGIN {FS=":"} {print $1}' passwd rootbindaemonadmlpsyncshutdownhaltmail

-

[root@server6 ~]# awk '{print $1,$2}' passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin [root@server6 ~]# awk '{print $1}' passwd root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemon:/sbin:/sbin/nologinadm:x:3:4:adm:/var/adm:/sbin/nologinlp:x:4:7:lp:/var/spool/lpd:/sbin/nologinsync:x:5:0:sync:/sbin:/bin/syncshutdown:x:6:0:shutdown:/sbin:/sbin/shutdownhalt:x:7:0:halt:/sbin:/sbin/haltmail:x:8:12:mail:/var/spool/mail:/sbin/nologin[root@server6 ~]# awk 'BEGIN {FS=":"}{print $2}' passwd xxxxxxxxx[root@server6 ~]# awk 'BEGIN {FS=":"}{print $3}' passwd 012345678
操作符语义+加-减*乘/除%取余^幂运算++自加1--自减1+=相加后赋值给变量>大于<=小于等于==等于!=不等于~匹配!~不匹配&&与

-

[root@server6 ~]# echo "test" |awk 'x=2 {print x+3}'5[root@server6 ~]# awk '/^$/{print x+=1}' file1 123[root@server6 ~]# cat file1 tian sheng wo cai bi you yongshao zhuang bu nu li,lao da tu shang bei 

-

[root@server6 ~]# df|grep "boot"|awk '{if($4<20000) print "Alart";else print "OK"}'OK[root@server6 ~]# dfFilesystem     1K-blocks    Used Available Use% Mounted on/dev/sda3       18555904 6354088  12201816  35% /devtmpfs          485292       0    485292   0% /devtmpfs             499968     172    499796   1% /dev/shmtmpfs             499968   51092    448876  11% /runtmpfs             499968       0    499968   0% /sys/fs/cgroup/dev/sda1         303780  154756    149024  51% /boottmpfs              99996       0     99996   0% /run/user/0tmpfs              99996      28     99968   1% /run/user/1000[root@server6 ~]# awk '{print length()}' file10002941
原创粉丝点击