博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
尝到awk
阅读量:5334 次
发布时间:2019-06-15

本文共 1707 字,大约阅读时间需要 5 分钟。

我前几天写的sed,这个时候继续了解它的兄弟,awk,两者都使用,一种感觉。既可以用来处理场。假设你想要做文本处理。sed删除。匹配,一些频繁更换使用,假设每一行文本,你想深入,一些每行和列处理的,例如,统计,格式化输出。awk就能够派上用场了

查看自己ubuntu当前的awk

which awk,其有用的是/usr/bin/mawk

在学习sed篇中,我们知道,sed是读取文本的每一行到一个模式空间,然后对模式空间的内容进行处理。事实上awk差点儿相同。它也是对模式空间进行处理。可是它做的处理动作时"切片"

1.awk的变量

为什么要先说变量呢。由于不用变量,awk基本上就是废(游戏玩多了^-^)

首先我们把/etc/passwd里面的第一行取出来备用

head -1 /etc/passwd > test.txt

$0  当前处理的记录(默认是行。除非指定RS)

awk 'BEGIN{FS=":"}{print $0}' test.txt
root:x:0:0:root:/root:/bin/bash

$1---$n 当前的第几个字段。和命令行參数类似

awk 'BEGIN{FS=":"}{print $1,$3}' test.txt

FS 这里记住:F表示域field。S表示分隔seperate

这里有两种写法:我喜欢用这样的,简洁明了

awk -F: '{print $1,$2,$3}' test.txt

RS 想想,R表示记录record,S同上

awk 'BEGIN{RS=":"}{print $1,$3}' test.txt
NF number of field 能够理解为多少列

awk 'BEGIN{FS=":"}{print NF}' test.txt

NR number of record 能够理解为多少行

awk 'BEGIN{FS=":"}{print NR}' test.txt
OFS  FS是处理这行的时候的分隔,O是指输出,OFS就是指输出时候的分隔符

awk 'BEGIN{FS=":"}{print $1,$2,$3}' OFS="#" test.txt

ORS 同理

2.awk的格式化输出

awk的处理完文本之后还能够依照格式化进行输出。非常强大吧,事实上说白了就是printf

awk -F: '{printf "%s#%s#%s\n" ,$1,$2,$3}' test.txt
%d 十进制整数

%f 浮点数

%s 字符串

%% 百分号

- 左对齐

尽管简单,可是灵活运用,效果特殊

3.awk的算术运算

awk支持的运算符:+ - * / % **  awk甚至提供了一些数学函数sin(x),cos(x)等

还能够做一些统计运算。统计某一列的值

awk '{ sum += $1 }; END { print sum }' file
awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}'
4.模式

awk '模式{命令}‘ file

模式能够是一下几种:

1.正則表達式

awk -F : '/^r/{print $1}' /etc/passwd
2.表达式

awk -F: '$3>=500{print $1,$3}' /etc/passwdawk -F: '$7 ~/bash$/{print $1,$7}' /etc/passwdawk -F: '$7 !~/bash$/{print $1,$7}' /etc/passwd
3.BEGIN和END

BEGIN{ 这里面放的是运行前的语句 }

END {这里面放的是处理全然部的行后要运行的语句 }

{这里面放的是处理每一行时要运行的语句}

比如:

awk 'BEGIN{test="123";print test}'
发现的事实,没有文件也可以用awk,
由于BEGIN它不依赖于输入,但请注意,打印,而无需使用内部变量$

转载于:https://www.cnblogs.com/mfrbuaa/p/5028752.html

你可能感兴趣的文章
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
python的猴子补丁monkey patch
查看>>
架构模式: API网关
查看>>
正则验证积累
查看>>
Linux学习-汇总
查看>>
83. 删除排序链表中的重复元素
查看>>
bzoj1048 [HAOI2007]分割矩阵
查看>>
python中的__init__ 、__new__、__call__等内置函数的剖析
查看>>
Java中的编码
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
MYSQL SHOW VARIABLES简介
查看>>
雷林鹏分享:Redis 简介
查看>>
C# 网页自动填表自动登录 .
查看>>
netfilter 和 iptables
查看>>
洛谷P1005 矩阵取数游戏
查看>>
Django ORM操作
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
HDU-1150 Machine Schedule 二分图匹配
查看>>
单例模式的5种写法
查看>>