awk 一

awk工具的使用

上面也提到了awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的。

分段打印出第三段

[[email protected] ~]# awk -F ‘:‘ ‘{print $3}‘ 1.txt
0
1
2
3
4
5
6
7
8
10

11
12
13
14
99
81
69
32
499
89
68
29
65534
74
500

多个段 
[[email protected] ~]# awk -F ‘:‘ ‘OFS=":" {print $3,$4}‘ 1.txt
0:0
1:1
2:2
3:4
4:r_o7
5:0
6:0
7:0
8:12
10:14
:
11:0
12:100
13:30
14:50
99:99
81:81
69:69
32:32
499:76
89:89
68:68
29:29
65534:65a534
74:74
500:500
:
:
:

也可以用下面

[[email protected] ~]# awk -F ‘:‘ ‘OFS="#" {print $3,$4}‘ 1.txt
0#0
1#1
2#2
3#4
4#r_o7
5#0
6#0
7#0
8#12
10#14
#
11#0
12#100
13#30
14#50
99#99
81#81
69#69
32#32
499#76
89#89
68#68
29#29
65534#65a534
74#74
500#500
#
#
#

匹配

[[email protected] ~]# awk ‘/user/‘ 1.txt
sasloauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:29:29:RPCr Service User:/var/lib/nfs:/sbin/nologin

匹配多个
[[email protected] ~]# awk ‘/user|root/‘ 1.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
sasloauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
rpcuser:x:29:29:RPCr Service User:/var/lib/nfs:/sbin/nologin

贪婪匹配  只要第一个是r最后一个是o

[[email protected] ~]# awk ‘/r.*o/‘ 1.txt
root:x:0:0:root:/root:/bin/bash
drooaemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:riox:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:r_o7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
ogames:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
vcsoa:x:69:69:virtual aconsole memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Da*emon:/var/cache/rpcbind:/sbin/nologin
sasloauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/sp.oool/postfix:/sbin/nologin
rpcuser:x:29:29:RPCr Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65a534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

一个或者零个
[[email protected] ~]# awk ‘/r.?o/‘ 1.txt
root:x:0:0:root:/root:/bin/bash
drooaemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:riox:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:r_o7:lp:/var/spool/lpd:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

一个或者多个

[[email protected] ~]# awk ‘/r.+o/‘ 1.txt
root:x:0:0:root:/root:/bin/bash
drooaemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:riox:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:r_o7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
ogames:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
vcsoa:x:69:69:virtual aconsole memory owner:/dev:/sbin/nologin
rpc:x:32:32:Rpcbind Da*emon:/var/cache/rpcbind:/sbin/nologin
sasloauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/sp.oool/postfix:/sbin/nologin
rpcuser:x:29:29:RPCr Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65a534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

匹配出一个或者多个
[[email protected] ~]# awk ‘/(oo)+/‘ 1.txt
root:x:0:0:root:/root:/bin/bash
drooaemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:riox:3:4:adm:/var/adm:/sbin/nologooin
lp:x:4:r_o7:lp:/var/spool/lpd:/sbin/nolooogin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdooown
mail:x:8:12:mail:/var/spool/mail:/sbin/nolooogin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
ogames:x:12:100:games:/usr/games:/sbin/nologooin
postfix:x:89:89::/var/sp.oool/postfix:/sbin/nologin

[[email protected] ~]# awk ‘/(ooo)+/‘ 1.txt
lp:x:4:r_o7:lp:/var/spool/lpd:/sbin/nolooogin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdooown
mail:x:8:12:mail:/var/spool/mail:/sbin/nolooogin
postfix:x:89:89::/var/sp.oool/postfix:/sbin/nologin

[[email protected] ~]# grep -E --color ‘(o){2,10}‘ 1.txt
root:x:0:0:root:/root:/bin/bash
drooaemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:riox:3:4:adm:/var/adm:/sbin/nologooin
lp:x:4:r_o7:lp:/var/spool/lpd:/sbin/nolooogin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdooown
mail:x:8:12:mail:/var/spool/mail:/sbin/nolooogin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
ogames:x:12:100:games:/usr/games:/sbin/nologooin
postfix:x:89:89::/var/sp.oool/postfix:/sbin/nologin

根据段匹配

[[email protected] ~]# awk -F ‘:‘ ‘$1~/r*o/‘ 1.txt
root:x:0:0:root:/root:/bin/bash
drooaemon:x:2:2:daemon:/sbin:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdooown
operator:x:11:0:operator:/root:/sbin/nologin
ogames:x:12:100:games:/usr/games:/sbin/nologooin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
vcsoa:x:69:69:virtual aconsole memory owner:/dev:/sbin/nologin
sasloauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
postfix:x:89:89::/var/sp.oool/postfix:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
nfsnobody:x:65534:65a534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

匹配出想要的段

[[email protected] ~]# awk -F ‘:‘ ‘$1~/r*o/ {print $3}‘ 1.txt
0
2
6
11
12
13
99
69
499
89
68
65534

多次匹配两个规则

[[email protected] ~]# awk -F ‘:‘ ‘$1~/r*o/ {print $1,$3}; $1~/user/ {print $1,$3}‘ 1.txt
root 0
drooaemon 2
shutdown 6
operator 11
ogames 12
gopher 13
nobody 99
vcsoa 69
sasloauth 499
postfix 89
haldaemon 68
rpcuser 29
nfsnobody 65534
一个规则
[[email protected] ~]# awk -F ‘:‘ ‘$1~/r*o|nobody/ {print $1,$3}‘ 1.txt                                                                root 0
drooaemon 2
shutdown 6
operator 11
ogames 12
gopher 13
nobody 99
vcsoa 69
sasloauth 499
postfix 89
haldaemon 68
nfsnobody 65534
时间: 2024-12-22 11:03:00

awk 一的相关文章

新awk整理

总感觉上一篇awk的总结几乎是照着man翻译过来的,惨不忍睹 无意间在互联网上有找到了宝贵的资料 感觉整理的很好,想着照着这个来重新写下,对照新的man更新下吧,只是总是在改变的 一.awk简介二.awk工作流程三.awk程序结构四.awk基本语法 awk命令行模式 awk程序文件 awk标准选项五.awk内置变量 标准awk变量 awk特定变量(即专有变量)六.awk操作符 算数运算符 关系运算符 逻辑运算符 三元运算符 一元运算符 字符串连接操作符(即空格符) 数组成员操作符(in) 正则表

linux提取指定列字符并打印所有内容(awk)

假设有文件长如下样子: CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  samplename 1 3552841 . G . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0;MQ=40;FQ=-29.9912 GT:PL:DP 0/0:0:1 1 3552842 . T . 32.995 . DP=1;MQ0F=0;AF1=0;AC1=0;DP4=1,0,0,0

shell之awk

简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行读入,以空格为默认分割符将每行切片,切开的部分再进行各种分析处理. 使用方法: awk [option] 'pattern1{action1}pattern2{action2}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令. awk

awk中使用shell变量

其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time="$TIME" 'BEGIN{FS="|"} {if ($7>time) print $2 }' 这样要注意:在awk里,time不能加$符号. 网上说如下方法都可行: 一:"'$var'" 这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如: var="test&quo

awk 字符串处理函数

awk提供了许多强大的字符串函数,见下表:awk内置字符串函数gsub(r,s)    在整个$0中用s替代rgsub(r,s,t)    在整个t中用s替代rindex(s,t)    返回s中字符串t的第一位置length(s)    返回s长度match(s,r)    测试s是否包含匹配r的字符串split(s,a,fs)    在fs上将s分成序列asprint(fmt,exp)    返回经fmt格式化后的expsub(r,s)    用$0中最左边最长的子串代替ssubstr(s,

awk

cat 1.txt 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 行转列: awk '{for(i=1;i<=NF;i++)printf("%s\n",$i)};{printf "\n"}' 1.txt 显示如下: 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9

如何在linux Shell脚本里面把一个数组传递到awk内部进行处理

前段时间和几位同事讨论过一个问题:Shell脚本里面怎样把一个数组传递到awk内部进行处理? 当时没有找到方法.前两天在QQ群里讨论awk的时候,无意间又聊起这个话题.机缘巧合之下找到一个思路,特此分享. 测试环境: [root]# head -1 /etc/redhat-release Red Hat Enterprise Linux Server release 6.5 (Santiago) [root]# awk --version | head -1 GNU Awk 3.1.7 众所周知

Linux文本处理三剑客之GNU awk的使用

awk: Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk(gawk) gawk –模式扫描和处理语言 基本用法: awk[options] 'program' var=value file- awk[options] -f programfile var=value file- awk[options] 'BEGIN{ action;... } pattern{ action;... } END{ acti

第4章 awk编程

1 awk编程模型       2 awk用法 调用awk有三种方法(与sed类似): 在Shell命令行输入命令调用awk,格式为: awk [-F 域分隔符] 'awk程序段' 输入文件 将awk程序段插入脚本文件后,然后通过awk命令调用它: awk -f awk脚本文件输入文件 将awk命令插入脚本文件后,最常用的方法是设置该脚本文件为可执行,然后直接执行该脚本文件,格式为: ./awk脚本文件输入文件 注:第二种方法脚本文件的首行不以#!/bin/awk –f开头:第三种方法脚本文件的

awk: (FILENAME=- FNR=1) 致命错误: 试图访问字段 -2

执行:awk '{print $(NF-2)}' aa.log 出现错误:awk: (FILENAME=aa.log FNR=1) 致命错误: 试图访问字段 -2 可能和aa.log中数据有关系: 改为: awk 'NF>1{print $(NF-2)}' aa.log