linux awk常用命令

前言

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

1、awk语法

awk  [option]  'pattern[action]'  file ...

awk   参数(可选)       条件动作           文件

特点:

  • awk擅长文本格式化,且能输出格式化后的结果,因此最常用的动作就是 print 和 printf
  • awk默认以空格为分隔符,且多个空格也识别为一个空格,作为分隔符;
  • awk按行处理文件,一行处理完毕之后,再处理下一行;
  • awk可以根据用户指定的分隔符去工作,没有指定,则默认为空格;
    2、内置变量

关系运算符

一、案例展示

1、输出第二列内容
awk '{print $2}' test1.txt

2、输出多列内容,中间用 “,” 分割
awk '{print $2,$3}' test1.txt

3、查看第二行内容
awk 'NR==2{print $0}' test1.txt

输出多行

awk 'NR==1,NR==2{print $0}' test1.txt

4、输出1-3行,并显示行号
wk 'NR==1,NR==3{print NR,$0}' test1.txt
5、自定义输出内容
awk '{print "first:" $1,"second:"$2}' test1.txt![](https://cdn.jsdelivr.net/gh/LiWei800999/tutu@main/202208222058439.png)

二、awk参数

参数说明
-F指定分隔字段符
-v定义或修改一个awk内部变量
-f从脚本文件中读取awk命令

可以使用#作为分隔符,而不是原来的空格

1、显示第一列和第二列内容
awk -F "#" '{print $1,$2}' test2.txt

2、显示文件第一列,倒数第一、第二列的内容
awk -F "#" '{print $1,$(NF),$(NF-1)}' test2.txt

3、获取本机的IP地址
ifconfig -a

ifconfig -a | awk 'NR==2{print $2}'

4、取出文件的第一列和最后一列

##### awk -F ":" '{print $1,$NF}' test3.txt

三、OFS输出分隔符

把文本分开的时候,可以采取其他自定义的分隔符,来让展示效果更加醒目。

awk -F ':' -v OFS=' === ' '{print $1,$NF}' test3.txt

四、FILENAME和ARGV的使用

可以在每行记录前输出当前文件名称;

awk 'NR==1,NR==3{print FILENAME,$0}' test3.txt

ARGV使用

awk 'NR==1,NR==3{print ARGV[0],ARGV[1],$0}' test3.txt

自定义变量

awk -v myname='tt' 'BEGIN{print "my name is ",myname}'

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qxBcAj5c-1661173485043)(https://cdn.jsdelivr.net/gh/LiWei800999/tutu@main/202208222101255.png)]

五、awk格式化输出

printf如果什么都不加

awk '{printf $0}' test3.txt

等同于print

awk '{printf "%s\n", $0}' test3.txt 

自定义

awk -F ":" '{printf "one:%s two:%s three:%s\n", $1,$2,$3}' test3.txt 

六、awk模式下的pattern

  • BEGIN 模式是处理文本之前需要执行的动作;
  • END模式是处理完成所有的行之后执行的操作;

见如下输出

awk 'BEGIN{print "linux"} {print $0}END{print "over"}' test3.txt

1、打印前三行的文本内容
awk 'NR<=3{print $0}' test3.txt

2、匹配密码文本中含有特定元素的行
awk '/tt/{print $0}' test3.txt 

3、格式化输出
awk -F ":" 'BEGIN{print"user\t\t\tfirst\t\t    second\t\t  password"} {printf "user:%-20s%-20s%-20s%-20s\n", $1,$2,$3,$4}' test3.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值