本文主要是介绍Linux系统命令三剑客awk,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、awk引子
awk是 Linux 里命令里处于【扫地僧】的地位
awk是一门语言,也是一个命令。
最擅长处理文本的语言或命令
Linux有三剑客命令: grep/sed/awk
三剑客各自特长:
grep #过滤内容
sed #取行
awk #取列 --- 取行 --- 过滤一、
二、什么是awk?
awk是一门语言,通过处理复杂文本字符串,取到最终需要的内容。
C、 C++ 开发人员,处理字符串几乎都会用 awk 。
命令行来说,掌握awk 命令基本使用
三、awk功能
常用功 能是【取列】,但是也可以【取行】和【过滤】。
awk '{print $1}' 文件 ##分隔符是空格
awk -F ":" '{print $1}' 文件 ##指定冒号为分隔符
注意写法:一对单引号里加一对大括号,里面加print $1 ,结尾加操作的文件
说明:
1)取的内容是每一行固定列或整行
2)不同列的内容默认分隔符是 [ 空格 ] 。
3) $1 是第一列, $2 是第二列 ,........ $NF 最后一列,倒数第二列 $(NF-1) , $0 是整行
4) -F 指定分隔符, ":" 是具体的分隔符,使用双引号引起来
小试牛刀练习1
#准备
[root@oldboy ~]# cd ~
[root@oldboyedu ~]# echo "oldboy oldgirl" >>oldboy.txt
[root@oldboyedu ~]# echo "oldboy oldgirl" >>oldboy.txt
[root@oldboyedu ~]# cat oldboy.txt
oldboy oldgirl
oldboy oldgirl
#取第一列
[root@oldboy ~]# awk '{print $1}' oldboy.txt
oldboy
oldboy
#取第二列
[root@oldboy ~]# awk '{print $2}' oldboy.txt
oldgirl
oldgirl
#取整行
[root@oldboy ~]# awk '{print $0}' oldboy.txt
oldboy oldgirl
oldboy oldgirl
#取第1列和第二列
[root@oldboy ~]# awk '{print $1,$2}' oldboy.txt
oldboy oldgirl
oldboy oldgirl
指定分隔符过滤(-F)
1 、指定分隔符过滤基本语法
## 语法: awk -F " 分隔符 " '{print $1}' /etc/passwd
1)取/etc/passwd的第1列
awk -F ":" '{print $1}' /etc/passwd
##简单写法
awk -F: '{print $1}' /etc/passwd
2)取/etc/passwd的第2列
awk -F ":" '{print $2}' /etc/passwd
3)取/etc/passwd的第整行
awk -F ":" '{print $0}' /etc/passwd
4)取/etc/passwd的尾列
awk -F ":" '{print $NF}' /etc/passwd
5)取/etc/passwd的倒数第2列
awk -F ":" '{print $(NF-1)}' /etc/passwd
指定分隔符同时输出多列语法:
awk -F "分隔符" '{print $1,$2}' 文件 ##逗号是空格。
1)取/etc/passwd的第1列和第2列
awk -F ":" '{print $1,$2}' /etc/passwd
2)取/etc/passwd的第1列、第3列和最后一列
awk -F ":" '{print $1,$3,$NF}' /etc/passwd
3)在输出的结果中加想要加的内容,这里加oldboy
awk -F: '{print $1,"oldboy",$2}' /etc/passwd
同时指定多分隔符
#语法:awk -F "[ /:=]" '{print $1,$2}' 文件
#遇到空格,斜线,冒号,等号都认为是分隔符。
#练习1:过滤ip a结果中的ip地址
##同时指定空格和斜线作为分隔符
[root@oldboy ~]# ip a|grep "/24"|awk -F "[ /]" '{print $6}'
10.0.0.128
#练习2:过滤stat /etc/hosts中的0644
[root@oldboy ~]# stat /etc/hosts|grep 0644|awk -F "[(/]" '{print $2}'
0644
多分隔符连续
#语法:awk -F "[ /:=]+" '{print $1,$2}' 文件
#遇到空格,斜线,冒号,等号都认为是分隔符。
#碰到连续的指定分隔符算一个分隔符。
#练习1:过滤ip a结果中的ip地址
##同时指定空格和斜线作为分隔符
[root@oldboy ~]# ip a|grep "/24"|awk -F "[ /]+" '{print $3}'
10.0.0.128
#练习2:把文件中的数字取出来
[root@oldboy ~]# echo ===1---2///3/@@@@4 >oldboy.txt
[root@oldboy ~]# cat oldboy.txt
===1---2///3/@@@@4
[root@oldboy ~]# awk -F '[=/@-]+' '{print $2,$3,$4,$5}' oldboy.txt
1 2 3 4
这篇关于Linux系统命令三剑客awk的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!