栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

【笔记】三剑客之awk、sed后向引用

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【笔记】三剑客之awk、sed后向引用

sed后向引用

语法格式:
sed -r ‘s#()#1#g’ file # 1 表示获取第一个括号中的内容
sed支持扩展正则需要加r参数

案例1: 调用括号中的内容
 [root@ahui ~]#echo root|sed -r 's#(root)#1#g'
 root
案例2: 匹配字符串调用内容
[root@ahui ~]#echo root ahui|sed -r 's#(root) ahui#1#g'
root
[root@ahui ~]#echo root ahui|sed -r 's#root (ahui)#1#g'
ahui
[root@ahui ~]#echo root ahui|sed -r 's#(root) (ahui)#1#g'
root
[root@ahui ~]#echo root ahui|sed -r 's#(root) (ahui)#2#g'
ahui
案例3: 支持正则
[root@ahui ~]#echo root ahui|sed -r 's#(r.*t) (ahui)#2#g'
ahui
[root@ahui ~]#echo root ahui|sed -r 's#(r.*t) (ahui)#1#g'
root
案例4: 对输出的内容格式化输出
[root@ahui ~]#echo root ahui|sed -r 's#(r.*t) (ahui)#<1><2>#g'

[root@ahui ~]#echo root ahui|sed -r 's#(r.*t) (ahui)#<1> <2>#g'
 
案例5: 使用sed后向引用获取IP地址

第一步: 获取ifconfig eth0第二行
使用grep 过滤唯一字符串

[root@ahui ~]#ifconfig eth0|grep netmask
inet 10.0.0.200  netmask 255.255.255.0  broadcast 10.0.0.255

[root@ahui ~]#ifconfig eth0|sed -n '2p'
inet 10.0.0.200  netmask 255.255.255.0  broadcast 10.0.0.255

第二步: 将输出的字符串写入替换位置 然后使用后向引用输出结果

[root@ahui ~]#ifconfig eth0|sed -n '2p'|sed -r 's#        inet (10.0.0.200)  netmask 255.255.255.0  broadcast 10.0.0.255#1#g'
10.0.0.200

第三步: 使用正则表示字符串

[root@ahui ~]#ifconfig eth0|sed -n '2p'|sed -r 's#^.*inet (.*)  net.*$#1#g'
10.0.0.200
案例6: 通过后向引用将输出结果特殊的符号进行处理
[root@ahui ~]#yum -y install bc
	
[root@ahui ~]#echo 1+1|bc
2
[root@ahui ~]#echo 1+2+3+4+5+6+7+8+9+10|bc
55
[root@ahui ~]#echo {1..10}+
1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ 10+
[root@ahui ~]#echo {1..10}+|bc
(standard_in) 2: syntax error
[root@ahui ~]#echo 1+2+3+4+5+6+7+8+9+10+|bc
(standard_in) 2: syntax error
[root@ahui ~]#echo {1..10}
1 2 3 4 5 6 7 8 9 10

使用sed替换空格为+

[root@ahui ~]#echo {1..10}|sed 's# #+#g'
1+2+3+4+5+6+7+8+9+10
[root@ahui ~]#echo {1..10}|sed 's# #+#g'|bc
55

[root@ahui ~]#echo {1..10}+|sed -r 's#(.*)#1#g'
1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ 10+
[root@ahui ~]#
[root@ahui ~]#
[root@ahui ~]#echo {1..10}+|sed -r 's#(.*)#10#g'
1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ 10+0
[root@ahui ~]#echo {1..10}+|sed -r 's#(.*)#10#g'|bc
55
	
	
[root@ahui ~]#echo {1..10}|tr " " "+"|bc
55
案例: 使用后向引用处理最后输出的字符
[root@ahui ~]#seq 10|tr "n" "+"
1+2+3+4+5+6+7+8+9+10+[root@ahui ~]#

[root@ahui ~]#seq 10|tr "n" "+"|sed -r 's#(.*)#1#g'
1+2+3+4+5+6+7+8+9+10+[root@ahui ~]#
[root@ahui ~]#
[root@ahui ~]#seq 10|tr "n" "+"|sed -r 's#(.*)#10n#g'
1+2+3+4+5+6+7+8+9+10+0
[root@ahui ~]#
[root@ahui ~]#seq 10|tr "n" "+"|sed -r 's#(.*)#10n#g'|bc
55
	
案例: 从1加到100
[root@ahui ~]#echo {1..100}|sed 's# #+#g'|bc
5050
[root@ahui ~]#echo {1..100}+|sed -r 's#(.*)#10#g'|bc
5050
[root@ahui ~]#seq -s + 100|bc
5050
案例:ps axuf 输出第五列的结果进行相加
[root@ahui ~]#ps axuf |awk '{print $5}'|tr "n" "+"
VSZ+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+0+125732+39080+45308+55508+539204+26440+58196+476372+223536+221232+99652+298708+195084+126284+99152+116360+247292+573816+112796+157188+116460+157188+116360+157188+116360+155460+113536+107972+157184+116360+123256+[root@ahui ~]#
[16:36:25 root@oldboyedu ~]#ps axuf |awk 'NR!=1{print $5}'|tr "n" "+1"|sed -r 's#(.*)#10n#g'|bc
4500124
awk

作用:
三剑客老大

  1. 取行
  2. 取列
  3. 编程语言 支持判断 循环 数组
  4. 支持运算 数据统计
  5. 格式化输出

语法结构:

  1. awk ‘模式’ file 只有模式不写动作(默认为输出动作) 输出的是模式中查找到的所有内容
    awk ‘模式{print}’ 默认输出动作 可省略

  2. cat file|awk ‘模式{动作}’

  3. awk ‘找谁{干啥}’ file

  4. awk ‘{动作}’ file 只有动作 处理所有的行
    awk内置变量:
    第一个: NR 存储着每一行的行号
    第二个: $0 存储每一行的内容
    第三个: $n 表示第n列
    第四个: , 动作{}中的 表示空格

awk取行

语法格式:
awk ‘NR==3’ file
NR 为awk的内置变量 存储着每一行的行号

在Linux系统中一个= 表示赋值(变量) name=ahui age=100
NR 比较符:

  • == 等于n行
  • > 大于n行
  • >= 大于等于
  • < 小于
  • <= 小于等于
  • != 不等于
  • && 并且
  • || 或者
案例1: 获取文件中的第三行
[root@ahui ~]#cat passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ahui ~]#awk 'NR==3' passwd.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
案例2: 查找文件中大于3行的内容
[root@ahui ~]#awk 'NR>3' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
案例3: 查找文件中大于等于3的内容
[root@ahui ~]#awk 'NR>=3' passwd.txt 
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
案例4: 查找文件中小于3的内容
[root@ahui ~]#awk 'NR<3' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

小于等于等于3

[root@ahui ~]#awk 'NR<=3' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
案例5: 除了第三行输出其他所有行
[root@ahui ~]#awk 'NR!=3' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
案例6: 查找NR等于1 并且 NR小于4的行
[root@ahui ~]#awk 'NR==1 && NR<4' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
案例7: 查找NR等于1 或者NR大于4的行
[root@ahui ~]#awk 'NR==1 || NR>4' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
案例8: 取出系统中磁盘的使用率的行

查看磁盘: df -h

[root@ahui ~]#df -h|grep '/$'
/dev/sda3        19G  2.1G   17G  11% /

[root@ahui ~]#df -h|sed -n '2p'
/dev/sda3        19G  2.1G   17G  11% /
[root@ahui ~]#df -h|sed -n '/sda3/p'
/dev/sda3        19G  2.1G   17G  11% /

[root@ahui ~]#df -h|awk 'NR==2'
/dev/sda3        19G  2.1G   17G  11% /
[root@ahui ~]#df -h|awk '//$/'
/dev/sda3        19G  2.1G   17G  11% /

awk模糊过滤

语法格式:
sed -n ‘//p’ file
awk ‘//’ file
awk ‘//,//’ file # 区间范围

案例1: 查找包含root的行
[root@ahui ~]#awk '/root/' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
root:x:0:0:root:/ahui:/bin/bash
案例2: 支持正则 以什么开头 以什么结尾
[root@ahui ~]#awk '/^r/' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
root:x:0:0:root:/ahui:/bin/bash

以b开头的行

[root@ahui ~]#awk '/^b/' passwd.txt 
bin:x:1:1:bin:/bin:/sbin/nologin

以n结尾的行

[root@ahui ~]#awk '/n$/' passwd.txt 
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

以h结尾的行

[root@ahui ~]#awk '/h$/' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
root:x:0:0:root:/ahui:/bin/bash
案例3: 并且或者
查找以h的行或者以n结尾的行
[root@ahui ~]#awk '/h$/ || /n$/' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ahui ~]#
[root@ahui ~]#

查找以h结尾的行并且行等于1

[root@ahui ~]#awk '/h$/ && NR==1' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
案例4: awk的区间范围
[root@ahui ~]#awk '/^b/,/r/' passwd.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash


[root@ahui ~]#cat passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ahui ~]#
[root@ahui ~]#awk '/ahui/,/root/' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
root:x:0:0:root:/ahui:/bin/bash

sed区间范围:

[root@ahui ~]#sed -n '/ahui/,/root/p' passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash

唯一值取区间范围

[root@ahui ~]#awk '/linux/,/blog/' ahui.txt
I teach linux.
test
$0 aaaa
$# bbbbbb

I like badminton ball ,billiard ball and chinese chess!
my blog is http: blog.51cto.com 

[root@ahui ~]#cat 2.txt 
ahui root
lidao  root
ahui hehe
aaaa   bbbb
[root@ahui ~]#awk '/ahui/,/root/' 2.txt
ahui root
ahui hehe
aaaa   bbbb
[root@ahui ~]#
[root@ahui ~]#
[root@ahui ~]#sed -n '/ahui/,/root/p' 2.txt
ahui root
lidao  root
ahui hehe
aaaa   bbbb
awk 取列

行: 横向
列: 竖向

awk取列 默认按照空格或者tab键作为分隔符
$0 表示每一行的内容
$1 表示第一列
$2 表示第二列
$n 表示第n列

案例1: $0 输出所有内容
[root@ahui ~]#awk '{print $0}' 2.txt 
ahui root
lidao  root
ahui hehe
aaaa   bbbb
案例2: 输出文件的第一列内容
[root@ahui ~]#cat 2.txt 
ahui root
lidao  root
ahui hehe
aaaa   bbbb
[root@ahui ~]#awk '{print $1}' 2.txt 
ahui
lidao
ahui
aaaa

输出文件的第二列内容

[root@ahui ~]#awk '{print $2}' 2.txt
root
root
hehe
bbbb
案例3: 同时输出第一列和第二列
[root@ahui ~]#awk '{print $2$3}' 2.txt 
root123
root234
hehe22
bbbb555
案例4: 输出多列以空格来分隔
[root@ahui ~]#awk '{print $2,$3}' 2.txt 
root 123
root 234
hehe 22
bbbb 555
案例5: 以符号作为分隔符使用""
[root@ahui ~]#awk '{print $2"---"$3}' 2.txt 
root---123
root---234
hehe---22
bbbb---555
案例6: 输出结果前后加任意内容

注意: 所有的普通字符串在awk中都看作是变量

name=ahui
echo $name
在双引号中所有的特殊符号都看作普通字符串


[root@ahui ~]#awk '{print $2" "$3}' 2.txt 
root 123
root 234
hehe 22
bbbb 555

[root@ahui ~]#awk '{print "user "$2" "$3}' 2.txt 
user root 123
user root 234
user hehe 22
user bbbb 555


[root@ahui ~]#echo {1..10}+|awk '{print $0"0"}'
1+ 2+ 3+ 4+ 5+ 6+ 7+ 8+ 9+ 10+0
[root@ahui ~]#
[root@ahui ~]#
[root@ahui ~]#echo {1..10}+|awk '{print $0"0"}'|bc
55
案例7: 输出最后一列的内容
[root@ahui ~]#cat 2.txt 
ahui root   123
lidao  root   234
ahui hehe   22
aaaa   bbbb   555
[root@ahui ~]#awk '{print $NF}' 2.txt 
123
234
22
555

NF 存储着最后一列的列号

[root@ahui ~]#cat 2.txt 
ahui root   123
lidao  root   234
ahui hehe   22
aaaa   bbbb   555
[root@ahui ~]#awk '{print NF}' 2.txt 
3
3
3
3


[root@ahui ~]#cat 2.txt 
ahui root
lidao  root   234
ahui hehe
aaaa   bbbb   555 aaaa
4444
[root@ahui ~]#awk '{print NF}' 2.txt 
2
3
2
4
1
[root@ahui ~]#awk '{print $NF}' 2.txt 
root
234
hehe
aaaa
4444

NF-1 表示倒数第二列的列数

[root@ahui ~]#awk '{print $(NF-1)}' 2.txt 
ahui
root
ahui
555
4444
[root@ahui ~]#
[root@ahui ~]#awk '{print NF-1}' 2.txt 
1
2
1
3
0
[root@ahui ~]#cat 2.txt 
ahui root
lidao  root   234
ahui hehe
aaaa   bbbb   555 aaaa
4444
awk 模式+动作

语法格式:
awk ‘{print }’ 动作
awk ‘NR==3’ 模式
awk ‘//’ 模式

案例1: 模式+动作
[root@ahui ~]#cat 2.txt 
ahui root
lidao  root   234
ahui hehe
aaaa   bbbb   555 aaaa
4444

[root@ahui ~]#awk 'NR==2' 2.txt 
lidao  root   234
[root@ahui ~]#awk 'NR==2{print}' 2.txt 
lidao  root   234

获取文件中第二行的第二列

[root@ahui ~]#awk 'NR==2{print $2}' 2.txt 
root

[root@ahui ~]#awk 'NR==4' 2.txt 
aaaa   bbbb   555 aaaa
[root@ahui ~]#
[root@ahui ~]#
[root@ahui ~]#awk 'NR==4{print $3,$4}' 2.txt 
555 aaaa

通过模糊查找过滤行 然后执行对应的动作

[root@ahui ~]#awk '/555/' 2.txt 
aaaa   bbbb   555 aaaa
[root@ahui ~]#awk '/555/{print $2,$1}' 2.txt 
bbbb aaaa
案例2: 获取磁盘的使用率
[root@ahui ~]#df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        19G  2.1G   17G  11% /
devtmpfs        918M     0  918M   0% /dev
tmpfs           929M     0  929M   0% /dev/shm
tmpfs           929M   34M  895M   4% /run
tmpfs           929M     0  929M   0% /sys/fs/cgroup
/dev/sda1       197M  102M   95M  52% /boot
tmpfs           186M     0  186M   0% /run/user/0
[root@ahui ~]#df|awk '//$/{print $(NF-1)}'
11%
awk 指定分隔符

awk默认空格和tab键作为分隔符
在文件中如果没有空格和tab我们可以指定内容作为分隔符来分隔列数
指定分隔符: -F (可指定任意内容长度的字符串)

案例1: 指定: 为分隔符取出passwd中的第一列用户名称

-F 指定分隔符

[root@ahui ~]#cat passwd.txt 
root:x:0:0:root:/ahui:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/ahui:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@ahui ~]#awk -F: '{print $1}' passwd.txt 
root
bin
daemon
root
adm
lp

第二种写法:加引号

[root@ahui ~]#awk -F ":" '{print $1}' passwd.txt 
root
bin
daemon
root
adm
lp

以冒号分隔输出最后一列的内容

[root@ahui ~]#awk -F: '{print $NF}' passwd.txt 
/bin/bash
/sbin/nologin
/sbin/nologin
/bin/bash
/sbin/nologin
/sbin/nologin
案例2: 使用任意字符串作为分隔符

以.为分隔符符 分成两列

[root@ahui ~]#echo ahui.com
ahui.com
[root@ahui ~]#echo ahui.com|awk -F. '{print $1}'
ahui
[root@ahui ~]#echo ahui.com|awk -F. '{print $2}'
com

[root@ahui ~]#echo ahui.com|awk -Fd '{print $1}'
ol
[root@ahui ~]#echo ahui.com|awk -Fd '{print $2}'
boye
[root@ahui ~]#echo ahui.com|awk -Fd '{print $3}'
u.com
案例3: 统计域名出现的次数取top10 (并且以出现次数的逆序进行排序)

文件中包含以下内容:
http://www.baidu.com/1.html
http://www.sina.com/index.php
http://www.baidu.com/2.html
http://www.sina.com/test.php
http://www.weibo.com/index.html
http://www.baidu.com/index.php

[root@ahui ~]#awk -F "/" '{print $3}' url.txt |sort|uniq -c|sort -rn|head
  3 www.baidu.com
  2 www.sina.com
  1 www.weibo.com


[root@ahui ~]#awk -F "[/]+" '{print $2}' url.txt 
www.baidu.com
www.sina.com
www.baidu.com
www.sina.com
www.weibo.com
www.baidu.com
awk 计算

awk ‘BEGIN{读取文件前执行的动作}{读取文件执行的动作}’ file
BEGIN 读取文件之前做什么
END 读取文件后做什么
在awk数组中使用
语法结构:

  • awk ‘BEGIN{}’ # 不需要读取文件 直接执行动作
  • awk ‘BEGIN{}{}’ file # 读取文件前做什么 读取文件 对读取到的内容做什么
  • awk ‘{}END{}’ file # 对文件内容做什么 读取完文件之后做什么
  • awk ‘BEGIN{}{}END{}’ # 读取文件前的动作 处理文件内容的动作 读取文件后的动作
案例1: BEGIN 直接输出内容 加双引号
[root@ahui ~]#awk 'BEGIN{print "开始"}'
开始

[root@ahui ~]#awk 'BEGIN{print "开始"}{print $1}' 2.txt
开始
ahui
lidao
ahui
aaaa
4444

[root@ahui ~]#awk 'BEGIN{print "开始"}{print $1}END{print "结束...."}' 2.txt
开始
ahui
lidao
ahui
aaaa
4444
结束....

[root@ahui ~]#awk 'BEGIN{print 10+10}'
20
[root@ahui ~]#awk 'BEGIN{print 10*10}'
100
[root@ahui ~]#awk 'BEGIN{print 10-10}'
0
[root@ahui ~]#awk 'BEGIN{print 10/10}'
1
[root@ahui ~]#awk 'BEGIN{print 10^^10}'
[root@ahui ~]#awk 'BEGIN{print 10^10}'
10000000000

不使用BEGIN做运算

[root@ahui ~]#echo 10 20|awk '{print $1,$2}'
10 20
[root@ahui ~]#echo 10 20|awk '{print $1*$2}'
200
[root@ahui ~]#echo 10 20|awk '{print $1+$2}'
30
案例: 统计内存的使用率

查看内存:

[root@ahui ~]#free
          total        used        free      shared  buff/cache   available
Mem:        1901124      123460     1257412       34436      520252     1554848
Swap:       1048572           0     1048572


[root@ahui ~]#free|awk 'NR==2'
Mem:        1901124      123600     1257240       34436      520284     1554704
[root@ahui ~]#free|awk 'NR==2{print $3}'
123724
[root@ahui ~]#free|awk 'NR==2{print $3,$2}'
124764 1901124
[root@ahui ~]#free|awk 'NR==2{print $3/$2*100}'
6.501

输出的结果加%

[root@ahui ~]#free|awk 'NR==2{print $3/$2*100"%"}'
6.50752%
小结:

awk ‘BEGIN{print “任意内容”}’
awk ‘BEEGIN{print 10+10}’

  1. awk 取行 模式(找谁)
    NR 行号
    NR==
    > >=
    < <=
    !=
    && ||
  • awk ‘NR==3’ file
  • awk ‘NR==3 && NR<10’ file
  • awk ‘NR==3 && /^r/’ file
  • awk ‘NR==3 || NR>5’ file
  1. awk 模糊查找
    awk ‘//’ file 模糊查找
    awk ‘//,//’ file 区间范围 唯一值之间的范围

  2. awk 取列 动作
    $0 整行内容
    $1 第一列

    • awk ‘{print $1}’ file
    • awk ‘{print $1,$2}’ file # 取第一列第二列之间用空格分隔
    • awk ‘{print NF}’ file # 最后一列的列号
    • awk ‘{print $NF}’ file # 表示最后一列的内容
    • awk '{print $(NF-1)}'file # 文件的倒数第二列

    在结果前面和后面输出我们想要的内容需要加双引号
    awk ‘{print "user: “$1” passwd: "$2}’

  3. awk 模式+动作
    - awk ‘NR3{print $1}’ file # 第三行的第一列
    - awk 'NR
    3||NR==5{print $1}’# 第三行和第五行的第一列
    - awk ‘/root/{print $NF}’ # 输出包含root行的最后一列
    - awk -F: ‘{print $NF}’ # 输出文件中所有行的最后一列

  4. awk 指定分隔符

    • -F “:” 或者 -F:
    • awk -F: ‘模式{动作}’ file
    • awk -F “[: /]+” ‘模式{动作}’ file
  5. awk计算

  • awk ‘BEGIN{}’ # 不需要读取文件 直接执行动作
  • awk ‘BEGIN{}{}’ file # 读取文件前做什么 读取文件 对读取到的内容做什么
  • awk ‘{}END{}’ file # 对文件内容做什么 读取完文件之后做什么
  • awk ‘BEGIN{}{}END{}’ # 读取文件前的动作 处理文件内容的动作 读取文件后的动作
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/893242.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号