前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >awk命令「建议收藏」

awk命令「建议收藏」

作者头像
全栈程序员站长
发布2022-07-07 20:58:59
5580
发布2022-07-07 20:58:59
举报

大家好,又见面了,我是全栈君。

1.awk工作流程

a)先运行BEGIN。

b)读取文件。读入有/n换行符切割的一条记录

c)将记录按指定的域分隔符进行划分域

d)填充域,当中$0表示全部域。$1表示第一个域,$n表示第那个域(默认域分隔符是空白键或者tab键)

e)開始运行模式所相应的动作action

f)接着開始读入第二条记录,直到全部的记录都被读完

g)运行END操作

2.用法

awk [-F field-separator] ‘{pattern + action}’ {filenames}

1. pattern表示awk在数据中查找的内容,action表示在找到匹配内容时所运行的一系列命令。

action{}能够有多个语句,以”;”号隔开。

2. [-F域分隔符]是可选的。 filenames是待处理的文件。在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下。默认的域分隔符是空格。

3.awk内置变量

ARGC 命令行參数个数

ARGV 命令行參数排列

ENVIRON 支持队列中系统环境变量的使用

FILENAME awk浏览的文件名称

FNR 浏览文件的记录数

FS 设置输入域分隔符,等价于命令行 -F选项

NF 浏览记录的域的个数

NR 已读的记录数

OFS 输出域分隔符

ORS 输出记录分隔符

RS 控制记录分隔符

某个文件从第n行到行尾

awk ‘{NR > n}’ filename

4.awk内置字符串函数

gsub(r,s) 在整个$0中用s替代r gsub(r,s,t) 在整个t中用s替代r index(s,t) 返回s中字符串t的第一位置 length(s) 返回s长度 match(s,r) 測试s是否包括匹配r的字符串 split(str,array,fs ) 在fs上将s分成序列a sprint(fmt,exp) 返回经fmt格式化后的exp sub(r,s) 用$0中最左边最长的子串取代s substr(s,p) 返回字符串s中从p開始的后缀部分 substr(s,p,n) 返回字符串s中从p開始长度为n的后缀部分

5.BEGIN和END

BEGIN表示在处理随意行之前进行的操作

END表示在全部输入行处理完后进行的处理。

6.条件语句

代码语言:javascript
复制
if (expression) {
    statement;
    statement;
    ... ...
}

if (expression) {
    statement;
} else {
    statement2;
}

if (expression) {
    statement1;
} else if (expression1) {
    statement2;
} else {
    statement3;
}

7.数组

由于awk中数组的下标能够是数字和字母,数组的下标通常被称为keyword(key)。值和keyword都存储在内部的一张针对key/value应用hash的表格里。由于hash不是顺序存储,因此在显示数组内容时会发现。它们并非依照你预料的顺序显示出来的。数组和变量一样,都是在使用时自己主动创建的。awk也相同会自己主动推断其存储的是数字还是字符串。一般而言。awk中的数组用来从记录中收集信息,能够用于计算总和、统计单词以及跟踪模板被匹配的次数等等。

代码语言:javascript
复制
awk -F ':' 'BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}' /etc/passwd
root
daemon
bin
sys
sync
games
......

awk -F’\t’ ‘{ a[$1]++ }’END'{ for(j in a) print a[j],j }’ filename | sort -rn | more

filename的内容为:

apple

banana

apple

apple

banana

pear

输出结果为:

3 apple

2 banana

1 pear

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/116223.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.awk工作流程
  • 2.用法
  • 3.awk内置变量
  • 4.awk内置字符串函数
  • 5.BEGIN和END
  • 6.条件语句
  • 7.数组
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档