三剑客命令 awk

Linux有三剑客命令:grep/sed/awk

三剑客各自特长:
grep #过滤内容
sed  #取行
awk  #取列---取行--过滤
 

awk介绍

awk是Linux里命令里处于【扫地僧】的地位
awk是一门语言,也是一个命令。

awk功能
常用功能是【取列】,也可以【取行】和【过滤】。

awk语法
awk '{print $1}' 文件
awk -F ":" '{print $1}' 文件

注意写法:一对单引号里加一对大括号,里面加print $1,结尾加操作的文件
说明:

1)取的内容是每一行固定列或整行
2)不同列的内容默认分隔符是[空格]。
3)$1是第一列,$2是第二列, $0是整行
4)-F指定分隔符,":"是具体的分隔符,使用双引号引起来。

示例 去第一列:

[root@madou ~]# cat old.ttx 
oldboy  oldb
oldboy  oldb
oldboy  oldb
oldboy  oldb
[root@madou ~]# awk '{print $1}' old.ttx 
oldboy
oldboy
oldboy
oldboy

 取整行 :

[root@madou ~]# awk '{print $0}' old.ttx 
oldboy  oldb
oldboy  oldb
oldboy  oldb
oldboy  oldb

 .指定分隔符过滤(-F)

指定分隔符过滤基本语法  示例:[root@madou ~]# awk -F : '{print $1}' /etc/passwd

1)取/etc/passwd的第1列
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

指定分隔符同时输出多列语法:[root@madou ~]# awk -F : '{print $1,$2}' /etc/passwd

从ip a或ifconfig结果中取出Ip地址(综合)
方法1:[root@madou ~]# ip a |grep '10.0.0'|awk '{print $2}'|awk -F/ {'print $1'}
10.0.0.100

使用多分隔符过滤
语法1:
awk -F "[/@ #]"  '{print $1,$2}' 文件

语法2:多个挨着的分隔符算一个分隔符
awk -F "[/@ #]+"  '{print $1,$2}' 文件

取行(干废sed)

语法:功能 NR

取第2行:awk NR==2 oldboy.txt

取第2-4行:awk NR==2,NR==4 oldboy.txt

取第2-4行:awk 'NR>1&&NR<5' oldboy.txt

取第2-4行:awk 'NR>=2&&NR<=4' oldboy.txt

awk过滤(干废grep)

问题:过滤/etc/passwd中包含oldboy字符串的行,并把登录解释器打印出来。

awk '/过滤的内容/' /etc/passwd

 示例:awk '/oldboy/' /etc/passwd
oldboy:x:8893:8893::/home/oldboy:/bin/bash

语法:awk '/过滤的内容/{print $1}' /etc/passwd

过滤的同时,还可以取列

awk -F ":" '/oldboy/{print $NF}' /etc/passwd

小总结:awk知识总结:
0)基本语法:awk '{print $1}' 文件
1)分隔符,默认是空格,可用-F "分隔符"
   语法:awk -F "分隔符" '{print $1}' 文件
2)取列
   输出内容用print
   不同列用下面符号
        $1是第一列
        $2是第二列
        $NF是最后一列
        $(NF-1)是倒数第二列
        $0 取整行
        NR行号
    不同列分割用逗号分割,本质是空格。输出其它内容放在双引号里输出。
3)多分隔符:/@#=任意一个字符都可以做分隔符
  语法1:awk -F "[/@#=]" '{print $1}' 文件
  语法2:awk -F "[/@#=]+" '{print $1}' 文件 ##多个连续的分隔符算一个。
  技巧:如何选取分隔符?选择要输出目标两边最近的字符作为分隔符。内容里不要包含分隔符。
4)过滤
  语法1:awk '/过滤的内容/' 文件
  语法2:awk '/过滤的内容/{print $1}' 文件
  语法3:awk '/$1~过滤的内容/{print $1}' 文件 ##第一列匹配指定内容
  语法4:awk '/$1=="过滤的内容"/{print $1}' 文件 ##第一列等于指定内容
  语法5:awk '/$3>100{print $1}' 文件 ##第3列内容大于指定内容,内容为数字。
5)取行
  语法1:awk 'NR==1,NR==4' 文件
  语法2:awk 'NR>0&&NR<5' 文件
  语法3:awk 'NR==4' 文件 #取第四行
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值