awk 命令使用

截取符合条件的列

awk 先读取第一行后,再去处理数据

例子:
cut 不能截取分隔符为空格,tab之类的文件或字符串,但awk可以
[root@zabbix lianxi]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G .5G 16G % /
devtmpfs .9G .9G % /dev
tmpfs .9G .9G % /dev/shm
tmpfs .9G 12M .9G % /run
tmpfs .9G .9G % /sys/fs/cgroup
/dev/sda1 1014M 189M 826M % /boot
tmpfs 378M 378M % /run/user/ [root@zabbix lianxi]# df -h | cut -d " " -f [root@zabbix lianxi]#
[root@zabbix lianxi]# awk '{printf $2 "\t" $6}' student.txt
Name AverageLiming .66Sc .66Gao 91.66[root@zabbix lianxi]# awk '{printf $2 "\t" $6\n}' student.txt
awk: cmd. line:: {printf $ "\t" $\n}
awk: cmd. line:: ^ backslash not last character on line
awk: cmd. line:: {printf $ "\t" $\n}
awk: cmd. line:: ^ syntax error
[root@zabbix lianxi]# awk '{printf $2 "\t" $6 "\n"}' student.txt
Name Average
Liming 87.66
Sc 85.66
Gao 91.66 ##############################################################################
解释:$ $ 代表文件的第2列和第6列,awk先读取文件的一行,并判断条件提取符合条件的信息,再读取下一行提取
$ 代表整行 [root@zabbix lianxi]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G .5G 16G % /
devtmpfs .9G .9G % /dev
tmpfs .9G .9G % /dev/shm
tmpfs .9G 12M .9G % /run
tmpfs .9G .9G % /sys/fs/cgroup
/dev/sda1 1014M 189M 826M % /boot
tmpfs 378M 378M % /run/user/
[root@zabbix lianxi]# df -h | awk '{printf $6 "\t" $2 "\n"}'
挂载点 容量
/ 17G
/dev .9G
/dev/shm .9G
/run .9G
/sys/fs/cgroup .9G
/boot 1014M
/run/user/ 378M [root@zabbix lianxi]# df -h | awk '{print $6 "\t" $2}'
挂载点 容量
/ 17G
/dev .9G
/dev/shm .9G
/run .9G
/sys/fs/cgroup .9G
/boot 1014M
/run/user/ 378M ############################################
print与printf的区别
print 默认行尾自动添加换行符,printf需要手动添加 [root@zabbix lianxi]# df -h | grep sda1
/dev/sda1 1014M 189M 826M % /boot
[root@zabbix lianxi]# df -h | grep sda1 | awk '{print $5}' | cut -d "%" -f ##################################
BEGIN [root@zabbix lianxi]# awk 'BEGIN {print "这是一个测试脚本"} {print $2 "\t" $6}' student.txt
这是一个测试脚本
Name Average
Liming 87.66
Sc 85.66
Gao 91.66 解释:只有满足了条件才能执行后面,也就是说先执行BEGIN语句后,再处理后面的数据。 ############################################
FS 内置变量
作用:指定分隔符 [root@zabbix lianxi]# awk '{FS=":"} {print $1 "\t" $3}' /etc/passwd
root:x:::root:/root:/bin/bash
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
apache
zabbix
mysql
user1
user2
user3 为什么第一行没有过滤?
因为:awk 先读取第一行后,再去处理数据
解决办法:再分隔符前添加BEGIN,这样先执行分隔符后,再读取第一行,并执行数据处理
注意:手工添加分隔符必须添加BEGIN [root@zabbix lianxi]# awk 'BEGIN {FS=":"} {print $1 "\t" $3}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
apache
zabbix
mysql
user1
user2
user3
[root@zabbix lianxi]# [root@zabbix lianxi]# awk 'BEGIN {FS=":"} {print $1 "\t" $3} END {print "aaaaaaaaa"}' /etc/passwd
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
apache
zabbix
mysql
user1
user2
user3
aaaaaaaaa [root@zabbix lianxi]# awk 'BEGIN {print "开始执行"} BEGIN {FS=":"} {print $1 "\t" $3} END {print "结束了"}' /etc/passwd
开始执行
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
operator
games
ftp
nobody
systemd-network
dbus
polkitd
sshd
postfix
chrony
apache
zabbix
mysql
user1
user2
user3
结束了 ###################################################################
关系运算符 [root@zabbix lianxi]# cat student.txt | grep -v Name
Liming 87.66
Sc 85.66
Gao 91.66
[root@zabbix lianxi]# cat student.txt | grep -v Name | awk '$6 >=86 {print $2}'
Liming
Gao 解释:查看student.txt 文件,取出不含Name的行,如果第6列的数据大于等于86,则打印第2列数据

最新文章

  1. React Native APP结构探索
  2. 理解Docker(6):若干企业生产环境中的容器网络方案
  3. 快速理解几种常用的RAID磁盘阵列级别
  4. 正则表达式/g与/i及/gi的意义
  5. Samba安装配置
  6. freeCodeCamp:Seek and Destroy
  7. JavaScript函数之美~
  8. 传递闭包(Floyd+bellman-Fold POJ1932)
  9. [CF]codeforces round 369(div2)
  10. P31、面试题2:实现Singleton模式
  11. button以回车方式提交
  12. Atitit. .net c# web 跟clientwinform 的ui控件结构比較
  13. Tomcat7性能优化
  14. 常量(constant)
  15. 假设result是一个float型变量,其值为27.32,value是一个int型变量,其值为15执行以下语句后,两个便利的值分别是多少?为什么?
  16. IE中的console.log
  17. [译]ElasticSearch vs. Solr
  18. Spring 源码分析之 bean 实例化原理
  19. [leetcode]Merge Intervals @ Python
  20. Trace VM

热门文章

  1. mysql workbench中PK,NN,UQ,BIN,UN,ZF,AI字段类型标识说明
  2. [论文笔记] Improving Head Pose Estimation with a Combined Loss and Bounding Box Margin Adjustment
  3. C#调用C++的库 P/Invoke工具集
  4. JS遍历二维数组
  5. Spring MVC对日期处理的不友好问题
  6. cocos2dx基础篇(10) 按钮控件CCControlButton
  7. face-api.js 前端人脸识别,人脸检测,登录认证
  8. linux下 sleep() 与 usleep()
  9. C#的Split()方法
  10. Tarjan水题系列(3):HNOI2006 潘多拉的魔盒