文档章节

awk命令

野雪球
 野雪球
发布于 10/19 08:30
字数 1597
阅读 9
收藏 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
博文 41
码字总数 45078
作品 0
贵阳
私信 提问
Linux下如何让 awk 使用 Shell 变量

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

xdl刘涛
2016/08/11
9
0
linux shell基础(六)awk命令(编辑中)

一、awk命令 二、对文本竖列的操作 awk命令能够方便的通过指定分隔记号将文本分成特定的列,然后在针对分出来的竖列进行操作 1、显示test.txt文档的第一列前5行。 awk -F ':' '{print $1}' ...

whytl
01/17
0
0
Hadoop Streaming和awk

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

jhonephone
2014/09/10
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

没有更多内容

加载失败,请刷新页面

加载更多

Spark性能优化之道

Spark性能优化之道——解决Spark数据倾斜(Data Skew)的N种姿势 本文结合实例详细阐明了Spark数据倾斜的几种场景以及对应的解决方案,包括避免数据源倾斜,调整并行度,使用自定义Partition...

GordonNemo
28分钟前
2
0
大数据驱动业务决策,CDN实时日志重磅上线

摘要: 阿里云CDN上线了实时日志功能,打通日志服务(SLS)的能力,将CDN采集的实时日志,在小于60秒的时间内投递至日志服务,进行实时、交互式分析和报表呈现。通过CDN日志的实时分析,可以快...

阿里云官方博客
33分钟前
3
0
springCloud学习笔记系列(3)-服务容错保护:Spring Cloud Feign

Feign包含了Ribbon和Hystrix,这个在实战中才慢慢体会到它的意义,所谓的包含并不是Feign的jar包包含有Ribbon和Hystrix的jar包这种物理上的包含,而是Feign的功能包含了其他两者的功能这种逻...

快乐的小火柴
35分钟前
1
0
各种数据库数据类型差异

文本 整数 浮点数 decimal Hive数据库 create table default.foo ( a DECIMAL, -- Defaults to decimal(10,0) b DECIMAL(20), -- Defaults to decimal(20,0) c DECIMAL(9, 7), d DE......

了凡川
39分钟前
4
0
springboot中filter的用法

一、在spring的应用中我们存在两种过滤的用法,一种是拦截器、另外一种当然是过滤器。我们这里介绍过滤器在springboot的用法,在springmvc中的用法基本上一样,只是配置上面有点区别。 二、f...

xiaomin0322
58分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部