文档章节

awk命令

野雪球
 野雪球
发布于 2018/10/19 08:30
字数 1597
阅读 10
收藏 0

-F选项的作用是指定分隔符。如果不加-F选项,则以空格或者tab为分隔符。print为打印操作,用来打印某个字段。$1为第1个字段,$2为第2个字段,以此类推。但是$0比较特殊,它表示整行:

[root@centos01 test_awk_dir]# head -n 5 test.txt
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
[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $1}'
root
bin
daemon
adm
lp
[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $0}'
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

awk的格式说明: -F后面紧跟单引号,单引号里面为分隔符。print操作要用{}括起来,否则会报错。print还可以打印自定义内容,但是自定义的内容要用双引号括起来:

[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $1,$2,$3}'
root x 0
bin x 1
daemon x 2
adm x 3
lp x 4
[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print $1"@"$2"@"$3}'
root@x@0
bin@x@1
daemon@x@2
adm@x@3
lp@x@4

匹配字符串

[root@centos01 test_awk_dir]# awk '/root/' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

指定某个段进行匹配,~就是匹配的意思。还可以多次匹配

[root@centos01 test_awk_dir]# awk -F ':' '$1~/root/' test.txt
root:x:0:0:root:/root:/bin/bash 

# 输出两条一样的是因为这一天同时满足root和operator匹配
[root@centos01 test_awk_dir]# awk -F ':' '/root/ {print $0} /operator/ {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

| 匹配串满足其一即可

[root@centos01 test_awk_dir]#  awk -F ':' '/root|operator/  {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

awk条件操作符

[root@centos01 test_awk_dir]# awk -F ':' '$3==0' test.txt
root:x:0:0:root:/root:/bin/bash
[root@centos01 test_awk_dir]# awk -F ':' '$3==0 {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash

[root@centos01 test_awk_dir]# awk -F ':' '$7=="/sbin/nologin" {print $0}' test.txt
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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
avahi-autoipd:x:170:170:Avahi IPv4LL Stack:/var/lib/avahi-autoipd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

[root@centos01 test_awk_dir]# awk -F ':' '$7!="/sbin/nologin" {print $0}' test.txt
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
snowball:x:1000:1000::/home/snowball:/bin/bash
test01:x:1001:1001::/home/test01:/bin/bash
test02:x:1002:1002::/home/test02:/bin/bash
test03:x:1003:1004::/home/test03:/bin/bash
test06:x:1004:1005::/home/test06:/bin/bash
test07:x:1005:1006::/home/test07:/bin/bash
test08:x:1006:1007::/home/test08:/bin/bash

[root@centos01 test_awk_dir]# awk -F ':' '$3<$4' test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
test03:x:1003:1004::/home/test03:/bin/bash
test06:x:1004:1005::/home/test06:/bin/bash
test07:x:1005:1006::/home/test07:/bin/bash
test08:x:1006:1007::/home/test08:/bin/bash

[root@centos01 test_awk_dir]# awk -F ':' '{if ($3<$4) {print $0}}' test.txt
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
test03:x:1003:1004::/home/test03:/bin/bash
test06:x:1004:1005::/home/test06:/bin/bash
test07:x:1005:1006::/home/test07:/bin/bash
test08:x:1006:1007::/home/test08:/bin/bash


[root@centos01 test_awk_dir]# awk -F ':' '$3<7 || $7 ~ /bash/'  test.txt
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
snowball:x:1000:1000::/home/snowball:/bin/bash
test01:x:1001:1001::/home/test01:/bin/bash
test02:x:1002:1002::/home/test02:/bin/bash
test03:x:1003:1004::/home/test03:/bin/bash
test06:x:1004:1005::/home/test06:/bin/bash
test07:x:1005:1006::/home/test07:/bin/bash
test08:x:1006:1007::/home/test08:/bin/bash

awk 常用的内置变量有OFS、NF和NR,其中OFS和-F选项有类似的功能,也是用来定义分隔符的,但是它是在输出的时候定义,NF表示用分隔符分隔后一共有多少段,NR表示行号

[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{OFS="@"} {print $1,$2,$3}'
root@x@0
bin@x@1
daemon@x@2
adm@x@3
lp@x@4

[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print NR"#"$0}'
1#root:x:0:0:root:/root:/bin/bash
2#bin:x:1:1:bin:/bin:/sbin/nologin
3#daemon:x:2:2:daemon:/sbin:/sbin/nologin
4#adm:x:3:4:adm:/var/adm:/sbin/nologin
5#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@centos01 test_awk_dir]# head -n 5 test.txt |awk -F ':' '{print NF"#"$0}'
5#0:0:root:/root:/bin/bash
7#bin:x:1:1:bin:/bin:/sbin/nologin
7#daemon:x:2:2:daemon:/sbin:/sbin/nologin
7#adm:x:3:4:adm:/var/adm:/sbin/nologin
7#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

[root@centos01 test_awk_dir]# awk -F ':' 'NR<=10' test.txt #输出前10行
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
operator:x:11:0:operator:/root:/sbin/nologin

[root@centos01 test_awk_dir]# awk -F ':' 'NR<=10 && $1 ~ /sync/' test.txt
sync:x:5:0:sync:/sbin:/bin/sync

[root@centos01 test_awk_dir]# head -n 3 test.txt
0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos01 test_awk_dir]#
[root@centos01 test_awk_dir]# head -n 3 test.txt | awk -F ':' '$1="root"'
root 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin

awk进行数学运算

[root@centos01 test_awk_dir]# tail -n 3 test.txt
test06:x:1004:1005::/home/test06:/bin/bash
test07:x:1005:1006::/home/test07:/bin/bash
test08:x:1006:1007::/home/test08:/bin/bash
[root@centos01 test_awk_dir]# tail -n 3  test.txt | awk -F ':' '{(total=total+$3)}; END {print total}'
3015

© 著作权归作者所有

共有 人打赏支持
下一篇: sed 命令
野雪球
粉丝 7
博文 70
码字总数 79542
作品 0
贵阳
私信 提问
Linux下如何让 awk 使用 Shell 变量

Linux下如何让 awk 使用 Shell 变量 当我们编写 shell 脚本时,我们通常会在脚本中包含其它小程序或命令,例如 awk 操作。对于 awk 而言,我们需要找一些将某些值从 shell 传递到 awk 操作中...

xdl刘涛
2016/08/11
9
0
Hadoop Streaming和awk

Hadoop streaming类似于Unix管道数据流,从标准输入(STDIN)输入,输出到标准输出(STDOUT),数据必须是基于文本的,文本的每一行被认为是一条记录。这也是很多Unix命令,例如:awk的工作方式。...

jhonephone
2014/09/10
0
0
Shell正则三剑客 | awk命令

AWK命令 awk 具有 grep 和 sed命令的特性,同时 AWK针对列进行匹配语法格式 Usage:awk[options] f progfile[--]file...Usage:awk[options] [--] 'program'file...常用选项 -F fs fs指定输入分......

寰宇01
2018/10/28
0
0
如何使用 awk 和正则表达式过滤文本或文件中的字符串

当我们在 Unix/Linux 下使用特定的命令从字符串或文件中读取或编辑文本时,我们经常需要过滤输出以得到感兴趣的部分。这时正则表达式就派上用场了。 什么是正则表达式? 正则表达式可以定义为...

开元中国2015
2016/07/19
48
0
awk 使用小结

AWK介绍 AWK是贝尔实验室1977年搞出来的为Unix/Linux提供样式扫描与处理工具,非常擅长处理结构化数据和生成表单。与sed 和grep 很相似,但功能却超过 两者,之所以叫AWK是因为其取了三位创始...

gfsfg8545
2014/02/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

mongodb副本集部署

常识: replset + shard replset是副本集,shard是分片 mongoDB的主从模式其实就是一个单副本的应用,没有很好的扩展性和容错性。而副本集具有多个副本保证了容错性,就算一个副本挂掉了还有...

谢思华
10分钟前
1
0
知名协作工具 Slack 换新 logo 啦!

简评:本文系译文。Slack 在自家 Blog 上解释了新的设计 —— 旧版的 logo 有 11 种颜色,在非白色背景的情况下,logo 不仅难看,而且很容易在多个地方上表现不一致。 新年换新装,Slack 已经...

极光推送
11分钟前
1
0
java程序向mysql插入中文变问号

我碰到的问题是使用客户端工具插入中文是没问题的,但是用java程序就变成问号了。 遇到这种问题肯定是字符集造成的,先检查数据库,表的字符集,都是utf8,然后看页面,程序等等等等都是utf...

hengbao5
13分钟前
2
0
边缘计算的爆发为安防全产业带来了怎样的变化?

随着物联网的快速发展以及数据处理 2.0 时代的来临,边缘计算很快成为了广受追捧的热门技术。IDC 数据显示,未来超过 50% 的数据需要在网络边缘侧分析、处理和存储,边缘计算市场规模将超万亿...

七牛云
17分钟前
0
0
中小企业如何借力工业互联网抵抗死亡潮?

对于不同的企业来说,跨步进入工业互联网的核心问题并不是“怎么做”,而是“能做什么”、以及“能不能做”。 尤其是在政策大力推动企业“上云上平台”的过程中,企业投入人力和成本,那么“...

阿里云云栖社区
18分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部