awk入门指南

awk的工作模式

awk是一个文本处理工具,通常用于处理数据并生成结果报告

语法格式
第一种形式

awk 'BEGIN{}pattern{commands}END{}' file_name
语法格式解释
BEGIN正式处理数据之前
pattern匹配模式
{commands}匹配命令,可能多行
END处理完所有匹配数据后执行

第二种形式

standard output |  awk 'BEGIN{}pattern{commands}END{}'

awk的内置变量

内置变量含义
$0整行内容
$1-$n当前行的第1-n个字段(按照指定分隔符分割后)
NF(Number Field)当前行的字段个数,也就是多少列
NR(Number Row)当前行的行号,从1开始计数
FNR(File Number Row)多文件处理时,每个文件行号单独计数,都是从0开始
FS(Field Separator)输入字段分割符。不指定默认以空格或者Tab键分割
RS(Row Separator)输入行分割符。默认回车\n
OFS(Output Field Sepatator)输出字段分割符。默认为空格
ORS(Output Row)输出行分隔符。默认为回车
FILENAME当前输入的文件名字
ARGC命令行参数个数
ARGV命令行参数数组

看一下/etc/passwd文件的内容

cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

输出文件的每行内容

awk '{print $0}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

输出第二列内容
需要指定分隔符:

awk 'BEGIN{FS=":"}{print $2}' /etc/passwd
x
x
x

不需要指定分割符,默认空格,tab键,多个也可以分隔(如一个空格+一个tab键)

show.txt文件内容如下

# 空格分隔
python java php
# tab键分隔
flink	hadoop	storm
awk '{print $1}' show.txt

输出如下:

python
flink

输出每一行有多少列

awk '{print NF}' show.txt

输出如下

3
3

可以用这个输出每一行的最后一列的值

awk '{print $NF}' show.txt

输出行号

awk '{print NR}' show.txt

输出如下(没有混合使用,例子比较简单)

1
2

对每个文件的行号单独计数

awk '{print FNR}' show.txt /etc/passwd

同时指定行分隔符和列分隔符

show.txt的文件内容如下

python|java|php--flink|hadoop|storm

先输出每一行数据

awk 'BEGIN{RS="--"}{print $0}' show.txt

输入如下

python|java|php
flink|hadoop|storm

输出每一行的第二列

awk 'BEGIN{RS="--";FS="|"}{print $2}' show.txt

输出如下

java
hadoop

在上面基础上指定行分隔符

awk 'BEGIN{RS="--";FS="|";ORS="&"}{print $2}' show.txt

输出如下

java&hadoop&

再次指定列分隔符

awk 'BEGIN{RS="--";FS="|";ORS="&";OFS="@@"}{print $1,$2}' show.txt

输出如下

python@@java&flink@@hadoop&

输出文件名字
show.txt的文件内容如下

python|java|php
flink|hadoop|storm
awk '{print FILENAME}' show.txt

输入如下,因为是对行进行处理,所以有几行,输出几次文件名

show.txt
show.txt

awk 格式化输出之printf

printf的格式说明符

格式符含义
%s打印字符串
%d打印十进制数
%f打印一个浮点数
%x打印十六进制数
%o打印八进制数
%e打印数字的科学计数法形式
%c打印单个字符的ASCII码

参考博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Java识堂

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

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

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

打赏作者

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

抵扣说明:

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

余额充值