awk

5 篇文章 0 订阅

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"}' file
Blank line
Blank line
Blank line
Blank line
Blank line
  • 打印主机名

-

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

-

[root@server6 ~]# awk -f awk.sh file 
Blank line
Blank line
Blank line
Blank line
Blank line
[root@server6 ~]# cat awk.sh 
/^$/{print "Blank line"}
[root@server6 ~]# cat file 





12121211:12121212
23232323:32232323
34343433: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}' passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail

-

# 以:,划分,打印第一个字段和第二个字段
[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 file1
tian sheng wo cai bi you yong
shao zhuang bu nu li,lao da tu shang bei 
[root@server6 ~]# cat file2
ren sheng chu chu shi feng jing
awk shi fei chang qiang da de
chang feng po lang hui you shi 

-

# 打印行标
[root@server6 ~]# awk '{print FNR}' file1 file2
1
2
1
2
3
[root@server6 ~]# awk '{print NR}' file1 file2
1
2
3
4
5

-

# 打印每一行字段数
[root@server6 ~]# awk '{print NF}' file1 
7
9
# 以:划分,取第一个字段
[root@server6 ~]# awk 'BEGIN {FS=":"} {print $1}' passwd 
root
bin
daemon
adm
lp
sync
shutdown
halt
mail

-

[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/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 'BEGIN {FS=":"}{print $2}' passwd 
x
x
x
x
x
x
x
x
x
[root@server6 ~]# awk 'BEGIN {FS=":"}{print $3}' passwd 
0
1
2
3
4
5
6
7
8
操作符 语义
+
-
*
/
% 取余
^ 幂运算
++ 自加1
-- 自减1
+= 相加后赋值给变量
> 大于
<= 小于等于
== 等于
!= 不等于
~ 匹配
!~ 不匹配
&&

-

[root@server6 ~]# echo "test" |awk 'x=2 {print x+3}'
5
[root@server6 ~]# awk '/^$/{print x+=1}' file1 
1
2
3
[root@server6 ~]# cat file1 



tian sheng wo cai bi you yong
shao 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 ~]# df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sda3       18555904 6354088  12201816  35% /
devtmpfs          485292       0    485292   0% /dev
tmpfs             499968     172    499796   1% /dev/shm
tmpfs             499968   51092    448876  11% /run
tmpfs             499968       0    499968   0% /sys/fs/cgroup
/dev/sda1         303780  154756    149024  51% /boot
tmpfs              99996       0     99996   0% /run/user/0
tmpfs              99996      28     99968   1% /run/user/1000
[root@server6 ~]# awk '{print length()}' file1
0
0
0
29
41
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值