字符截取命令-awk命令分析

符号 阅读:184 2021-07-29 11:57:44 评论:0

awk命令是一个异常复杂的命令。了解常用的用法。

功能:文件中截取我们需要的数据

#awk '条件1{动作1}条件2{动作2}...' 文件名

说明:

条件(Pattern)
- 一般使用关系表达式作为条件
- x>10判断变量 x是否大于10
- x>=10 大于等于10
- x<=10 小于等于10
动作(Action)
- 格式化输出
- 流程控制语句

例如:

[[email protected] home]# cat student.txt  
ID  Name    gender  Mark 
1   furong  F   88 
2   fengjie F   60 
3   cang    F   70

查看文件student.txt第二列和第四列

[[email protected] home]# awk '{printf $2 "\t" $4 "\n"}' student.txt  
Name    Mark 
furong  88 
fengjie 60 
cang    70 

说明

  • awk一行一行的的读取文件
  • 判断条件,如果条件满足,则执行动作
  • 把文件名赋值给$0字段,将ID赋值给$1字段,依次类推
  • awk默认是空格或者制表符做为分隔符
  • 没有条件限制就是无条件显示执行动作
  • 仅仅是提取制表符和有规律的

示例:

[root@localhost home]# df -h | awk '{print $5}' 
Use% 
21% 
0% 
30% 
1% 
1% 
[root@localhost home]# df -h 
Filesystem      Size  Used Avail Use% Mounted on 
/dev/sda6       5.9G  1.2G  4.5G  21% / 
tmpfs           491M     0  491M   0% /dev/shm 
/dev/sda1       190M   54M  127M  30% /boot 
/dev/sda2       9.5G   23M  9.0G   1% /home 
/dev/sda5       1.9G  3.1M  1.8G   1% /usr/local 
[root@localhost home]# df -h | grep "/dev/sda6" | awk '{print $%}' 
awk: {
  print $%} 
awk:         ^ syntax error 
[root@localhost home]# df -h | grep "/dev/sda6" | awk '{print $5}' 
21% 
[root@localhost home]# df -h | grep "/dev/sda6" | awk '{print $5}' | cut -d "%" -f 1 
21 

示例2

[root@localhost home]# cat student.txt  
ID  Name    gender  Mark 
1   furong  F   88 
2   fengjie F   60 
3   cang    F   70 
[root@localhost home]# awk 'BEGIN{print "this is a test"}{print $2 "\t" $4}' student.txt  
this is a test 
Name    Mark 
furong  88 
fengjie 60 
cang    70 
[root@localhost home]# awk 'END{print "this is a test"}{print $2 "\t" $4}' student.txt  
Name    Mark 
furong  88 
fengjie 60 
cang    70 
this is a test 

BEGIN作用,awk默认是用空格或者制表符进行分割的。BEGIN作用是设定变量来做分隔符。如果不写BEGIN,则awk会从读取第一行后才能执行按照分隔符分割的。

[[email protected] home]# cat /etc/passwd |grep "/bin/bash" 
root:x:0:0:root:/root:/bin/bash 
imooc:x:502:889:kk,kk,kk,kk:/home/xxx:/bin/bash 
cls:x:500:889:dgdzmx:/home/cls:/bin/bash 
user1:x:503:503::/home/user1:/bin/bash 
tony:x:504:504::/home/tony:/bin/bash 
lw:x:505:505::/home/lw:/bin/bash 
user2:x:506:506::/home/user2:/bin/bash 
[[email protected] home]# cat /etc/passwd |grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3}' 
root    0imooc  502cls  500user1    503tony 504lw   505user2    506[[email protected] home]# cat /etc/passwd |grep "/bin/bash" | awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}' 
root    0 
imooc   502 
cls 500 
user1   503 
tony    504 
lw  505 
user2   506 
[[email protected] home]# cat /etc/passwd |grep "/bin/bash" |grep -v "root" |  awk 'BEGIN{FS=":"}{printf $1 "\t" $3 "\n"}' 
imooc   502 
cls 500 
user1   503 
tony    504 
lw  505 
user2   506 
[[email protected] home]# 

标签:linux
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

发表评论
搜索
KIKK导航

KIKK导航

排行榜
关注我们

一个IT知识分享的公众号