博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
awk工具
阅读量:5861 次
发布时间:2019-06-19

本文共 6718 字,大约阅读时间需要 22 分钟。

awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行

head -n2 test.txt|awk -F ':' '{print $1}'  //截取文档的第一段

 head -n2 test.txt|awk -F ':' '{print $0}' //截取文档前两行

awk '{print $0}' test.txt //不指定分隔符默认使用空格或者tab空白字符

awk -F ':' '{print $1,$2,$3}' test.txt  //分别截取第一、第二、第三段

 awk -F ':' '{print $1"#"$2"#"$3"#"$4}' //分别截取第一到第四段#隔开

 awk '/oo/' test.txt  //匹配含有oo字符的行

 awk -F ':' '$1 ~/oo/' test.txt  //表示让第一段匹配到oo的行

awk -F ':' '$1~/o+/' test.txt  //表示第一段匹配到至少一个o或者多个的行

 awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt //匹配含有root行输出第一和第三段,匹配test的行输出第一和第三段

 awk -F ':' '$3=="0"' /etc/passwd  

 awk -F ':' '$3>="500"' /etc/passwd  //第三段大于等于500的(500被认为一个字符串)

 awk -F ':' '$3>=500' /etc/passwd  //第三段大于等于500的。数字不要加双引号(加双引号会被认为是一个字符串)。

 awk -F ':' '$7!="/sbin/nologin"' /etc/passwd //第七段不是/sbin/nologin字符串(要加双引号)

 

user2

user6

lsx

lsx2

[root@lsx-02 awk]# awk -F ':' '{print $1}' passwd  打印第一段 所有段(整行)0表示 不指定分隔符默认以空格分开

 

user6 x 1001 1001

lsx x 1011 1011

lsx2 x 1012 1012

[root@lsx-02 awk]# awk -F ':' '{print $1,$2,$3,$4}' passwd

 

user6#x#1001#1001

lsx#x#1011#1011

lsx2#x#1012#1012

[root@lsx-02 awk]# awk -F ':' '{print $1"#"$2"#"$3"#"$4}' passwd 以什么连接“”引起来

 

[root@lsx-02 awk]# awk -F ':' '$1 ~/oo/' passwd  匹配把第一段含有oo的字符打印出来

root:x:0:0:root:/root:/bin/bash

rooooaiperator:x:11:0:operator:/rcot:/sbin/nologin

[root@lsx-02 awk]# awk -F ':' '$1 ~/o+/' passwd 优势于grep sed

root:x:0:0:root:/root:/bin/bash

daemon:x:2:2:daemon:/sbin:/sbin/nologin

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

 

[root@lsx-02 awk]# sed -n '/oo/p' passwd 类似于awk同上

root:x:0:0:root:/root:/bin/bash

lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

 

[root@lsx-02 awk]# awk -F ':' '/root/ {print$1,$5} /bus/ {print $2,$3}' passwd

root root

x 81

 

[root@lsx-02 awk]# egrep 'root|bus' passwd   egrep

root:x:0:0:root:/root:/bin/bash

dbus:x:81:81:System message bus:/:/sbin/nologin

[root@lsx-02 awk]# awk '/root|bus/' passwd  同上

root:x:0:0:root:/root:/bin/bash

dbus:x:81:81:System message bus:/:/sbin/nologin

 

user6:x:1001:1001::/home/user11:/bin/bash

lsx:x:1011:1011::/home/lsx:/bin/bash

lsx2:x:1012:1012::/home/lsx2:/bin/bash

[root@lsx-02 awk]# awk -F ':' '$3>="1000"' passwd  不是针对数字的不要加双引号,加双引号是按Asicc

 

[root@lsx-02 awk]# awk -F ':' '$7!="/sbin/nologin"' passwd  字符串要双引号括起来

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/SBin/nologin

 

awk -F ':' '$3<$4' /etc/passwd  //第三段小于第四段

 awk -F ':' '$3>"5" && $3<"7"' /etc/passwd 第三段字符大于5并且第三段字符小于7

 awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd //第三段大于100或者第七段等于..

awk -F ':' '$3>100 || $1~/root/' test.txt //匹配

 head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}‘

awk -F ':' '{OFS="@"} $3>10 || $1=="root" {print $1,$2,$3}' test.txt //OFSprint打印指定用什么符号作为分隔符  OFSprint顺序改变会影响结果。两个大括号之间设置条件

root@x@0

operator@x@11

 

 awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' /etc/passwd

awk -F ':' '{OFS="!"} $1~/root/ {print $1,$2,$3}' test.txt

root!x!0

awk -F ':' '{OFS="!"} {if ($1~/root/) {print $1,$2,$3}}' test.txt  //这种便于理解

root!x!0

 

 head -n3 /etc/passwd | awk -F ':' '{print NF}‘

awk -F ':' '{print NF}' test.txt  //以冒号为分隔符,输出一共多少段。-NF

7

7

7

 

 head -n3 /etc/passwd | awk -F ':' '{print NR}‘

awk -F ':' '{print NR":"$0}' test.txt  //输出一共多少行

1:root:x:0:0:root:/root:/bin/bash

2:bin:x:1:1:bin:/bin:/sbin/nologin

 

 awk 'NR>40' /etc/passwd

awk 'NR<=10' test.txt  //打印110

root:x:0:0:root:/root:/bin/bash

bin:x:1:1:bin:/bin:/sbin/nologin

 

 awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd 

awk 'NR<=10 && $1 ~ /root|sync/' test.txt  //匹配小于等于10行并且第一段包含root或者sync字符

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

operator:x:11:0:operator:/root:/sbin/nologin

 

 head -n 3 /etc/passwd |awk -F ':' '$1="root"‘

 awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd

 awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd

 

[root@lsx-02 awk]# awk -F ':' '$3>"5" && $3<"7"' passwd

shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

 

[root@lsx-02 awk]# awk -F ':' '$3>1000 || $7~/bash/' passwd  

root:x:0:0:root:/root:/bin/bash

user1:x:1006:1001::/home/lsx3:/sbin/nologin

lsx6:x:1009:1009::/home/lsx6:/bin/bash

user2:x:1010:1010::/home/user2:/bin/bash

user6:x:1001:1001::/home/user11:/bin/bash

 

[root@lsx-02 awk]# awk -F ':' '{OFS="#"} $3>1000 || $7~/bash/ {print$1,$2,$3}'  passwd   OFS  print打印指定分割符号

root#x#0

user1#x#1006

lsx6#x#1009

 

[root@lsx-02 awk]# awk -F ':' '{OFS="#"} {if($3>1000){print$1,$2,$3}}'  passwd

user1#x#1006

lsx6#x#1009

user2#x#1010

 

25user2:x:1010:1010::/home/user2:/bin/bash

26user6:x:1001:1001::/home/user11:/bin/bash

27lsx:x:1011:1011::/home/lsx:/bin/bash

28lsx2:x:1012:1012::/home/lsx2:/bin/bash

[root@lsx-02 awk]# awk -F ':' '{print NR$0}' passwd  NR显示所有的行号

 

NF :用分隔符分隔后一共有多少段

NR :行数

awk -F ':' '{print $NF}' test.txt  //$NF 表示最后一段的值

/bin/bash

/sbin/nologin

 

7user2:x:1010:1010::/home/user2:/bin/bash

7user6:x:1001:1001::/home/user11:/bin/bash

7lsx:x:1011:1011::/home/lsx:/bin/bash

7lsx2:x:1012:1012::/home/lsx2:/bin/bash

[root@lsx-02 awk]# awk -F ':' '{print NF$0}' passwd  NR打印有几段

 

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

[root@lsx-02 awk]# sed -n '1,10p' passwd

 

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

[root@lsx-02 awk]# awk -F ':' 'NR<=10' passwd 同上 打印前10

 

[root@lsx-02 awk]# awk -F ':' 'NR<=10 && $1~/root|sync/' passwd

root:x:0:0:root:/root:/bin/bash

sync:x:5:0:sync:/sbin:/bin/sync

 

[root@lsx-02 awk]# awk -F ':' '{print $NR":"$NF}' passwd   1-7  30-7

root:/bin/bash

x:/sbin/nologin

2:/sbin/nologin

4:/sbin/nologin

lp:/sbin/nologin

/sbin:/bin/sync

/sbin/shutdown:/sbin/shutdown

:/sbin/halt

 

[root@lsx-02 awk]# sed -n '3,4p' passwd | awk -F ':' '$1="root"'   =赋值

root

root x 2 2 daemon /sbin /sbin/nologin

awk -F ':' '{OFS="@"} $1="root"' test.txt  //OFS

root@x@0@0@root@/root@/bin/bash

 

[root@lsx-02 awk]# awk -F ':' '{

{tot=tot+$3}}; END {print tot}' passwd  值相加

7704

[root@lsx-02 awk]# awk -F ':' '{tot=tot+$4};END{print tot}' passwd

7801

 

(杀鸡焉用宰牛刀)

[root@lsxlinux02 awk]# grep -E 'root|User' test.txt

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

[root@lsxlinux02 awk]# sed -nr '/root|User/'p test.txt

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

[root@lsxlinux02 awk]# awk '/root|User/ {print $0}' test.txt

root:x:0:0:root:/root:/bin/bash

operator:x:11:0:operator:/root:/sbin/nologin

ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

polkitd:x:999:998:User for polkitd:/:/sbin/nologin

 

df -h|awk 'NR==2 {print $5}'

10%

 

 

小结:sed擅长输出行,awk擅长列

本文转自 虾米的春天 51CTO博客,原文链接:http://blog.51cto.com/lsxme/1984094,如需转载请自行联系原作者

你可能感兴趣的文章
commandLink/commandButton/ajax backing bean action/listener method not invoked (转)
查看>>
(一) pyhon 基础语法(数值 字符串 元组 列表 字典)
查看>>
HDOJ 1003:求一串数字中和最大的连续子串
查看>>
RedHat 5.6_x86_64 + ASM + RAW+ Oracle 10g RAC (二)
查看>>
MySQL/InnoDB的并发插入Concurrent Insert
查看>>
转两好文防丢:Debian 版本升级/降级 & Linux 应用程序失去输入焦点问题的解决...
查看>>
HDU - Pseudoforest
查看>>
Nexus杂
查看>>
Linux平台Java调用so库-JNI使用例子
查看>>
Web服务器压力测试工具http_load、webbench、ab、Siege使用教程
查看>>
Mac软件下载备忘
查看>>
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory
查看>>
就是一个表格
查看>>
找回使用Eclipse删除的文件
查看>>
集成spring3、hibernate4、junit
查看>>
URL与ASCII
查看>>
java读取properties配置文件
查看>>
UITableview中cell重用引起的内容重复的问题
查看>>
Windows7操作系统安装教程(图文)
查看>>
除了模拟手术教学,VR在医疗领域如何应用?
查看>>