三剑客之awk

awk

可以做运算
awk语法结构:
            awk '{print xx}'
            awk '{动作}' file #如果不加print默认就是输出
            awk '模式{动作}' file
            awk '找谁 干啥' file
找谁:找行 找列 字符串
动作:都是在{}

awk指定行查找

环境准备
[root@shang:~]# cat a.txt 
1 aaa 
2 vvv
3 bbb
4 ddd
5 ccc
6 kkk
7 lll
8 aaa
9 uuu
10 bbb
11 ddd
12 ooo
awk 'NR==行数' file
比较符:
!= 不等于
== 相等
> 大于
>= 大于等于
< 小于
<= 小于等于

区间范围:
&& 并且
|| 或者

案例1:查找第一行的内容
[root@shang:~]# awk 'NR==1' a.txt 
1 aaa

案例2:查找大于8的行 #可以 >= 大于等于
[root@shang:~]# awk 'NR>=8' a.txt 
8 aaa
9 uuu
10 bbb
11 ddd
12 ooo

案例3:查找小于3的行 #可以 <= 小于等于
[root@shang:~]# awk 'NR<3' a.txt 
1 aaa 
2 vvv

案例4:查找不等于4的行
[root@shang:~]# awk 'NR!=4' a.txt 
1 aaa 
2 vvv
3 bbb
5 ccc
6 kkk
7 lll
8 aaa
9 uuu
10 bbb
11 ddd
12 ooo

案例5:查找小于10的行大于3的行
[root@shang:~]# awk 'NR<10&&NR>3' a.txt 
4 ddd
5 ccc
6 kkk
7 lll
8 aaa
9 uuu

案例6:查找大于10的行或者小于3的行
[root@shang:~]# awk 'NR>10||NR<3' a.txt 
1 aaa 
2 vvv
11 ddd
12 ooo

awk取列

语法结构:
        awk '{print $1}' file #获取文件第一列内容
        
        awk -F:      指定分隔符
        awk -F ":"
        如果指定冒号为分隔符 空格失效 会打印出来
        可以指定任意的字符为字符串 可以指定多个
        eg;awk -F ":/" '{print $}' file
        :/ 分割为整体

awk默认以空格或者tab键作为列的分割符
$0 表示每行的内容 所有
$1 表示第一列
$2 表示第二列
......
$NF #表示最后一列 #NF存放最后一列的列号 加上$


案例1:查找第一行第二列
[root@shang:~]# awk 'NR==1{print $2}' a.txt 
aaa

案例2:查找最后一列
[root@shang:~]# awk '{print $NF}' a.txt 
aaa
vvv
bbb
ddd
ccc
kkk
lll
aaa
uuu
bbb
ddd
ooo

案例3:查找倒数第二列 加减乘除先算括号
[root@shang:~]# awk '{print $(NF-1)}' a.txt 
1
2
3
4
5
6
7
8
9
10
11
12

案例4:查找第10行的倒数第二列
[root@shang:~]# awk 'NR==10{print $(NF-1)}' a.txt 
10

案例5:指定分隔符
环境:
[root@shang:~]# tail /etc/passwd >> b.txt
[root@shang:~]# cat b.txt 
tcpdump:x:72:72::/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/false
zabbix:x:990:986:Zabbix Monitoring System:/var/lib/zabbix:/sbin/nologin
www:x:666:666::/home/www:/bin/bash
wen:x:1003:1003::/home/wen:/bin/bash
shang:x:1004:1004::/home/shang:/bin/bash
shang1:x:1008:1008::/home/shang1:/bin/bash
shang2:x:1009:1009::/home/shang2:/bin/bash
shang3:x:1010:1010::/home/shang3:/bin/bash

案例6:指定多个符号为分隔符 :/为一个整体 输出第二列
[root@shang:~]# awk -F":/" '{print $2}' b.txt 

etc/ntp
var/lib/mysql
var/lib/zabbix
home/www
home/wen
home/shang
home/shang1
home/shang2
home/shang3

案例7:取多列
[root@shang:~]# awk -F: '{print $2,$4}' b.txt 
x 72
x 38
x 27
x 986
x 666
x 1003
x 1004
x 1008
x 1009
x 1010

案例8:任意单个符号
[root@shang:~]# awk -F[:/] '{print $1}' b.txt 
tcpdump
ntp
mysql
zabbix
www
wen
shang
shang1
shang2
shang3

案例9:连续或一次以上的都匹配一次 eg::/ 或 : 或 /
[root@shang:~]# awk -F[:/]+ '{print $5}' b.txt 
sbin
etc
MySQL Server
Zabbix Monitoring System
home
home
home
home
home
home

awk匹配字符串

语法结构:
        grep'字符串' file
        sed -n '/字符串/p' file
        awk '/字符串/' file
        默认支持拓展正则

案例1:查找包含shang1的行
[root@shang:~]# awk -F[:/]+ '/shang1/{print $1}' b.txt 
shang1

案例2:区间范围
[root@shang:~]# awk '/vvv/,/kkk/' a.txt 
2 vvv
3 bbb
4 ddd
5 ccc
6 kkk

案例3:默认支持正则
开头:
[root@shang:~]# awk '/^1/' a.txt 
1 aaa 
10 bbb
11 ddd
12 ooo
结尾:
[root@shang:~]# awk '/c$/' a.txt 
5 ccc

案例4:匹配$1=www的行
[root@shang:~]# awk -F: '$1=="www"{print $2,$3}' b.txt 
x 666

awk模式+动作

语法格式:
        awk 'NR==3{print $3}' file
        awk '找谁{动作}'
找谁:
awk 'NR==3'
awk '$1="root"'
awk '/root/'
awk '/n$/'
awk '/^s/'

#统计/etc/passwd中每个单词出现的数量
cat /etc/passwd | sed  's#[:/0-9]# #g'| sort | xargs -n1 | grep . -o|sort|uniq -c|sort -n
孩儿立志出乡关,学不成名誓不还。埋骨何须桑梓地,人生无处不青山。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇