awk使用

awk上

awk上

分段查询,指定分隔符

(打印第一段)
[root@localhost ~]# awk -F ':' '{print $1}' passwd1 |head -4
root
bin
daemon
adm
[root@localhost ~]# head -4 passwd1 
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
(打印所有段)
[root@localhost ~]# awk '{print $0}' passwd1 |head -4
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

分段查询不使用分隔符,则默认以空格或空白字符分割
打印多段可以以 ,或者其它指定符号分割

[root@localhost ~]# awk -F ':' '{print $1"#"$2"#"$3}' passwd1 |head -4
root#x#0
bin#x#1
daemon#x#2
adm#x#3

指定查询包含 oo 的行

[root@localhost ~]# awk '/oo/' passwd1 
root:x:0:0:root:/root:/bin/bash
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
postfix:x:89:89::/var/spool/postfix:/sbin/nologin

第一段包含

[root@localhost ~]# awk -F ':' '$1 ~ /oo/' passwd1 
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F ':' '$1 ~ /oo+/' passwd1 
root:x:0:0:root:/root:/bin/bash

匹配并打印指定段

[root@localhost ~]# awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' passwd1 
root 0
operator 11

判断符号匹配

[root@localhost ~]# awk -F ':' '$3=="0"' passwd1 
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F ':' '$3>="500"' passwd1 
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
nobody:x:99:99:Nobody:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
(比较的是ASCII值比较的)
[root@localhost ~]# awk -F ':' '$3>=500' passwd1 
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash
[root@localhost ~]# awk -F ':' '$7!="/sbin/nologin"' passwd1 
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
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash

awk下

awk下

判断符号匹配

[root@localhost ~]# awk -F ':' '$3<$4' passwd1 
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
[root@localhost ~]# awk -F ':' '$3>"5" && $3<"7"' passwd1 
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@localhost ~]# awk -F ':' '$3>1000 || $7=="/bin/bash"' passwd1 
root:x:0:0:root:/root:/bin/bash
wsl:x:1000:1000::/home/wsl:/bin/bash
wsl1:x:1001:1001::/home/wsl1:/bin/bash

指定打印的后的分隔符

[root@localhost ~]# head -4 passwd1 |awk -F ':' '{OFS="#"}{print $1,$3,$4}'
root#0#0
bin#1#1
daemon#2#2
adm#3#4

增加判断语句

[root@localhost ~]# awk -F ':' '{OFS="#"}{if($3>1000){print $1,$3,$4}}' passwd1 
wsl1#1001#1001

显示行号

[root@localhost ~]# awk -F ':' '{print NR":"$0}' passwd1 |head -5
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@localhost ~]# awk -F ':' '{print NF":"$0}' passwd1 |head -5
7:root:x: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

行数小于10作为判断

[root@localhost ~]# awk -F ':' 'NR<=10' passwd1 
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
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost ~]# awk -F ':' 'NR<=10 && $1 ~ /root|syrnc/' passwd1 
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk -F ':' 'NF<=10 && $1 ~ /root|syrnc/' passwd1 
root:x:0:0:root:/root:/bin/bash

NR和NF做参数

[root@localhost ~]# awk -F ':' '{print $NR":"$NF}' passwd1 |head -4
root:/bin/bash
x:/sbin/nologin
2:/sbin/nologin
4:/sbin/nologin

赋值

[root@localhost ~]# awk -F ':' '{OFS=":"}  $1="root"' passwd1 |head -4
root:x:0:0:root:/root:/bin/bash
root:x:1:1:bin:/bin:/sbin/nologin
root:x:2:2:daemon:/sbin:/sbin/nologin
root:x:3:4:adm:/var/adm:/sbin/nologin

计算第三段的和

[root@localhost ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' passwd1 
4606
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • awk 用于文本文件的分析与处理 0x00 使用方法 awk '{pattern + action}' [file...
    cr4zyd0g阅读 1,483评论 1 56
  • awk介绍awk变量printf命令:实现格式化输出操作符awk patternawk actionawk数组aw...
    哈喽别样阅读 1,709评论 0 4
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 13,025评论 2 33
  • 本章主要学习内容awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 awk条件判断 a...
    楠人帮阅读 1,354评论 0 8
  • awk:报告生成器,格式化文本输出 内容: awk介绍 awk基本用法 awk变量 awk格式化 awk操作符 a...
    BossHuang阅读 1,533评论 0 9

友情链接更多精彩内容