Linux中awk用法

Linux中awk的用法

1.awk概述
AWK是一个优良的文本处理工具,它通过扫描文件中的每一行,查找与命令行中所给定内容相匹配的模式。如果发现匹配内容,则进行下一个编程步骤。如果找不到匹配内容,则继续处理下一行。
2.格式
awk [选项参数] ‘script’ var=file(s)或
awk [选项参数] -f scriptfile var=file(s)

3.参数
-F -----指定输入文件折分隔符。默认的分隔符为空格

4.内置变量

  • $0 整行
  • $n 第n列
  • NF 当前行有几列,逐行处理(列数)
  • NR 当前行的行号(行数)
  • FNR 记录当前处理行在原文本内的序号(行号)
  • FS 保存或设置分隔符,FS=“:”也可以写为-F

5.运算判断
awk支持多种运算,这些运算与C语言提供的基本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、–、+=、-=、=+、=-之类的功能。awk同样支持关系判断
常用的==(等于)、!=(不等于)、>(大于)、>=(大于等于)、<=(小于等于)等等

[root@localhost Desktop]# awk -F: '$1~/root/{print $1}' /etc/passwd
root

仅对第一列匹配

[root@localhost Desktop]# awk -F: '$3>1000 {print $1}' /etc/passwd
nfsnobody

在/etc/passwd文件中打印出uid大于1000的用户名

6.流程控制
awk提供流程控制语句,if,while,for类似于c语言

7.实例
显示本机的ip地址

[root@localhost Desktop]# ifconfig eno16777736 |grep inet |awk '{print $2}'
192.168.230.140
fe80::20c:29ff:fed8:7834

先用ifconfig命令显示本机具体的ip信息,然后使用grep过滤ip地址所在行信息,最后用awk进行抓取指定字段。

显示最近系统登录情况

[root@localhost Desktop]# last  |awk '{print $1}'
root
root
(unknown
reboot

wtmp

查看Redhat用户的bash

[root@localhost Desktop]# cat /etc/passwd |grep redhat |awk -F":" '{print $7}'
/bin/bash

这个没有使用默认的分隔符,指定为:

NF计算每行列数
[root@localhost Desktop]# cat /etc/fstab

#
cat /etc/fstab
#Created by anaconda on Mon Sep 16 22:28:05 2019
#
#Accessible filesystems, by reference, are maintained under '/dev/disk'
#See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/rhel-root   /                       xfs     defaults        0 0
UUID=c66514ee-7005-4db4-94a6-fd2c9c27eb49 /boot                   xfs     defaults        0 0
/dev/mapper/rhel-swap   swap                    swap    defaults        0 0
[root@localhost Desktop]# awk '{print NF}' /etc/fstab 
0
1
2
10
1
9
12
1
6
6
6

查看/etc/fstab的行数

[root@localhost Desktop]# awk '{print NR}' /etc/fstab
1
2
3
4
5
6
7
8
9
10
11

在某行输出前添加字段

[root@localhost Desktop]# awk -F":" '{print "hello",$1}' /etc/passwd
hello root
hello bin
hello daemon
hello adm
hello lp
hello sync
hello shutdown
hello halt
hello mail
hello operator
hello games
hello ftp
hello nobody
hello avahi-autoipd
hello dbus
hello polkitd
hello abrt
hello tss
hello unbound
hello colord
hello usbmuxd
hello libstoragemgmt

你可能感兴趣的:(shell,awk)