尝到awk

简介:

我前几天写的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/passwd
awk -F: '$7 ~/bash$/{print $1,$7}' /etc/passwd
awk -F: '$7 !~/bash$/{print $1,$7}' /etc/passwd
3.BEGIN和END

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

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

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

比如:

awk 'BEGIN{test="123";print test}'

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







本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5028752.html,如需转载请自行联系原作者


相关文章
|
机器学习/深度学习 编解码 Go
YOLOv8改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)
YOLOv8改进 | Conv篇 | 利用YOLO-MS的MSBlock轻量化网络结构(既轻量又长点)
566 0
|
前端开发
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
|
6月前
|
存储 缓存 网络协议
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。
|
11月前
|
NoSQL Redis 数据库
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
文章提供了Redis图形化界面工具的下载及使用教程,包括如何连接本地Redis服务器、操作键值对、查看日志和使用命令行等功能。
1750 0
Redis 图形化界面下载及使用超详细教程(带安装包)! redis windows下客户端下载
|
安全 开发工具 Python
滑动拼图验证,摆脱烦人的验证码输入
你最近是否遇到过令人头疼的验证码?为何不让滑动拼图成为你的新选择呢?通过完成一个有趣的滑动拼图来验证你的身份,既能锻炼大脑,又能保护你的隐私。
滑动拼图验证,摆脱烦人的验证码输入
|
Java 编译器 程序员
Java面试题-异常
Java面试题-异常
233 122
|
大数据 Android开发
Android使用AIDL+MemoryFile传递大数据
Android使用AIDL+MemoryFile传递大数据
198 0
|
11月前
|
存储 算法 决策智能
【算法】博弈论(C/C++)
【算法】博弈论(C/C++)
|
设计模式 Java 调度
JUC线程池: ScheduledThreadPoolExecutor详解
`ScheduledThreadPoolExecutor`是Java标准库提供的一个强大的定时任务调度工具,它让并发编程中的任务调度变得简单而可靠。这个类的设计兼顾了灵活性与功能性,使其成为实现复杂定时任务逻辑的理想选择。不过,使用时仍需留意任务的执行时间以及系统的实际响应能力,以避免潜在的调度问题影响应用程序的行为。
170 1
|
机器学习/深度学习 分布式计算 监控
实时流处理技术在金融风控中的应用
【7月更文挑战第16天】实时流处理技术在金融风控中的应用,不仅提升了金融服务的质量和效率,还在风险管理、反欺诈、市场洞察等方面发挥着至关重要的作用。随着大数据技术的不断发展,实时流处理技术将在金融领域发挥更加广泛和深入的作用,为金融机构带来更多的创新和发展机遇。