ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

三剑客之awk

2021-05-13 14:52:45  阅读:204  来源: 互联网

标签:bin NF awk print NR reg 三剑客


awk

【功能】

用于处理文本擅长取行;取列

【语法】

awk  +参数  文件

【参数】

参数选项

解释说明(带※的为重点)      *****

NR==

代表行数分为 (1 2 3 4......)

'{print NR}' 默认是行数

$(NF-1)

倒数第二行

-F

指定分隔符默认为空格(同时可以指定多把菜刀)

-v

v   左边是要修改变量的名字,右边是修改成的的名字

OFS  内置变量

-vOFS

修改自带变量

"[,  ]"

指定多把菜刀

取反

NF

代表行尾,最后一列

$

代表列 1.......

END

awk 'END{ print NR }' 文件可以显示行数

> ; <


+

把连续出现的合并成一个

.

任意字符

*

所有

BEGIN

awk 'BEGIN{print 10*2}'   计算机

20

(NR%2)

基数行

!(NR%2

偶数行

BEGIN

优先执行

END

最后执行

环境1:cat xiaojiang

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin


环境:2  ifconfig 

eth0      Link encap:Ethernet  HWaddr 00:0C:29:31:15:26  
          inet addr:10.0.0.200  Bcast:10.0.0.255  Mask:255.255.255.0


环境

Zhang Dandan    41117397   :250:100:175
Zhang Xiaoyu    390320151  :155:90:201
Meng  Feixue    80042789   :250:60:50
Wu    Waiwai    70271111   :250:80:75
Liu   Bingbing  41117483   :250:100:175
Wang  Xiaoai    3515064655 :50:95:135
Zi    Gege      1986787350 :250:168:200
Li    Youjiu    918391635  :175:75:300
Lao   Nanhai    918391635  :250:100:175


 

实例1 

1.1 说明第二行

awk NR==2 xiaojiang 
bin:x:1:1:bin:/bin:/sbin/nologin


实例2

1.2 说明打印行号

awk '{print NR $0}' xiaojiang 
1root:x:0:0:root:/root:/bin/bash
2bin:x:1:1:bin:/bin:/sbin/nologin
3daemon:x:2:2:daemon:/sbin:/sbin/nologin


实例3

1.3 说明第一第三列

awk -F ":" 'NR==1{print $3}' xiaojiang


实例4

1.4 说明:指定 空格分隔符+表示把连续出现的合为一个

方法一:ifconfig|awk -F "[: ]+" 'NR==2{print $4}'
10.0.0.200
方法二:ifconfig|awk -F "[: B]+" 'NR==2{print $4}'
10.0.0.200


实例5

1.5 说明显示多少行和大几行的内容

awk 'END{ print NR }' xiaojiang

3

awk 'NR >2{print $0}' p   查看大于第二行的以外的内容

 

实例6

1.6 说明取反(取出不是r开头的行

awk '!/^r/' xiaojiang

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

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


实例7

1.7 说明取出开头结尾的

awk '/^r.*h$/' xiaojiang

awk '/^lp/,/^ma/' passwd.txt   从哪里来到哪了去

 

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

 

实例8

1.8 说明调换顺序追加到新文件里

awk -F ":" 'NR==1{print $NF";"$2";"$3";"$4";"$5";"$6";"$1}' xiaojiang

/bin/bash;x;0;0;root;/root;root

实例9

1.9 说明找出空行

awk "/^$/" xiaojiang

 

实例10

1.10 说明:-vOFS变量说明

前言介绍,方便理解:

[root@oldboyedu-39-nb ~]# echo 1 2 3

1 2 3

echo 1 2 3 |awk -vOFS="@@@" '{print $1,$2,$3}'

1@@@2@@@3

例子:

awk -F ":" -v OFS=":" '{print $NF,$2,$3,$4,$5,$6,$1}' passwd

 

echo 1 2 3 4 5 6|awk '{a=$1;$1=$6;$6=a;print $0}'

6 2 3 4 5 1


1.11 (\S和\s的用法)  排除文本中的空白显示/etc/inittab中以#开头,且后面跟了一个或者多个空白字符,而后又跟了任意非空白字符的行

awk   '/^#\s+\S+/' /etc/inittab

1.12 查找偶数行和技和计算行数

awk '(NR%2)' a   基数行

awk '!(NR%2)' a  偶数行

awk -F -vi=0 '{if(NR%2!=1){i=i+NR}}END{print i}' a  (计算偶数行,是行号加起来的数)

awk -F  -vi=0  '{if(NR%2){i=i+NR}}END{print i}' a     奇数行总行数


1.13 显示最后一列包含sbin/nologin的行

awk  '$NF~/nologin$/' passwd.txt


1.14 显示文件的第20到30行

awk 'NR==2,NR==5' passwd.txt

1.14.1 显示Xiaoyu的姓氏和ID 号码

awk '$2~/Xiaoyu/{print $1,$3}' reg.txt


1.15 显示Zhang的行和他的第二次捐款金额及他名字

awk -F "[: ]+" '$1~/Zhang/{print $1,$2,$(NF-1)}' reg.txt


1.16 显示以41开头的ID号码的人的全名和ID号码

awk '$3~/^41/{print $1,$2,$3}' reg.txt


1.17 显示以1和5结尾的  查看行

awk '$3~/[15]$/' reg.txt

awk '$3~/1|5$/{print $1,$2}' reg.txt

awk '$3~/(1|5)$/{print $1,$2}' reg.txt


1.18 显示把:换成$  修改分割符

awk '$2~/Xiaoyu/{print $NF}' reg.txt |tr ":" "$"

awk -F "[ :]+" '$2~/Xiaoyu/{print "$"$4,"$"$5,"$"$6}' reg.txt

awk -F '[ :]+'  -vOFS="$"  '$2~/Xiaoyu/{print OFS$4,$5,$6}' reg.txt

 

awk '{gsub(/:/,"$",$NF); print $0}' reg.txt

原来是什么   要替换成什么  在哪里替换

 

1.19 BEGIN用法  

awk 'BEGIN{print "姓氏","名字"}{print $1,$2}' reg.txt

姓氏 名字

Zhang Dandan

Zhang Xiaoyu

 

1.20 GIN用法

awk '{print $1,$2};END{print "结束了"}' reg.txt

Zhang Dandan

Lao Nanhai

结束了


1.21 计算出现次数 sort|uniq -c|sort -rnk2

i=i+1======i++      i=i+10===i+=10

方法一:awk '/250/{print $NF}' reg.txt|sort|uniq -c|sort -rnk2

方法二:awk '/250/{i=i+1;print i}' reg.txt

方法三:grep -c '250' reg.txt

方法四:awk '/250/{++i}END{print i}' reg.txt 


1.22 修改换行符

awk '{print $0,RS}' ppppp   显示换行符浩

awk 'BEGIN{RS="/"}{print NR $0}' ppppp  修改换行符

 

1.23 awk替换  gsub

awk '{gsub(/:/,"$",$NF); print $0}' reg.t

 

1.24 查看文件有多少行

awk  '{print NF}' /tmp/user.txt


1.25 找出文件中只有一列的

awk 'NR>1{if (NF<2) print $0}' test.txt


标签:bin,NF,awk,print,NR,reg,三剑客
来源: https://blog.51cto.com/u_15196512/2773445

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有