AWK---经典实例

1、插入几个新字段:

在"a b c d"的 b 后面插入3个字段 e f g。

[root@localhost ~]# echo "a b c d" | awk '{$2=$2" e f g ";print}'
a b e f g  c d

2、格式化空白:

移除每行的前缀、后缀空白,并将各部分左对齐
image.png

#法一:
[root@localhost ~]# awk '{$1=$1;print}' 2.awk 
aaa bbb ccc
bbb aaa ccc
ddd fff eee ggg hh jj

#法二:
[root@localhost ~]# awk 'BEGIN{OFS="\t"}{$1=$1;print}' 2.awk 
aaa	bbb	ccc
bbb	aaa	ccc
ddd	fff	eee	ggg	hh	jj

3、筛选IPV4地址:

从ifconfig命令的结果中筛选出除了lo网卡外的所有IPv4地址。

image.png

特殊的RS值用来解决特殊读取需求:

  • RS="”: 按段落读取;
  • RS="\0”: 一次性读取所有数据,但有些特殊文件中包含了空字符 \00RS="~s”:真正的一次性读取所有数据,因为非空文件不可能匹配成功;
  • RS="n+”: 按行读取,但忽略所有空行;

FS为输入分割符;

#法一:(按照行取值)
[root@localhost ~]# ifconfig | awk '/inet /&& !($2 ~ /^127/){print $2}'
192.168.40.141
192.168.122.1

#法二:(按照段落取值)
[root@localhost ~]# ifconfig | awk 'BEGIN{RS=""}!/lo/{print $6}'
192.168.40.141
192.168.122.1

#法三:(划分每行找第二个元素)
[root@localhost ~]# ifconfig | awk 'BEGIN{RS="";FS="\n"}!/lo/{$0=$2;FS=" ";$0=$0;print $2}'
192.168.40.141
( 改变分隔符之后必须用$0=$0重新赋值,才可以打印)

4、读取.ini配置文件中的某段:

image.png

[root@localhost ~]# cat 1.awk 
BWGIN{
   RS=""}   #按段落
/\[mysql\]/{
   
	print;
	while((getline)>0){
   
		if(/\[.*\]/){
   
			exit
		}
		print
	}
}

[root@localhost ~]# awk -f 1.awk dem1.txt 
[mysql]
name=mysql_repo
baseurl=https://xxx/mysql-repo/yum/mysql-5.7-community/el/$releasever/$basearch

gpgcheck=0
enable=1

上代码,利用 -f 选项 利用 awk 规则文件做筛选;读取到所需要的标签继续往下读取,直到遇到不需要的标签就暂停读取直接打印;

5、根据某字段去重:

去掉uid=xxx重复的行。

image.png

首先利用uid去重,我们需要利用 ? 进行划分,然后将uid=xxx保存在数组中,这是判断重复的依据;
然后统计uid出现次数,第一次出现统计,第二次不统计;

[root@localhost ~
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RongChuJie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值