AWK入门
AWK
类型
AWK:源于AT&T实验室的AWK
NAWK:AWK的升级版
GAWK:GNU AWK,兼容AWK和NAWK
程序结构
BEGIN语句块,可选
BEGIN {awk-commands}
BODY语句块
/pattern/ {awk-commadns}
END语句块
END {awk-commands}
例:awk
'BEGIN{printf "sr no\tname\tsub\tmarks\n"}
{print}
END{this is a test}' masks.txt
基础语法
格式:awk [options] file....
例:awk ‘{print}’ masks.txt
选项:
-f:指定脚本文件
1、创建脚本文件commands.awk
vim command.awk
{print}
2、执行
awk -f command.awk marks.txt
-v:变量赋值在程序开始前赋值
例:awk -v name=jerry 'BEGIN{printf "Name = %s\n",name}'
--dump-variables[=file]:
输出排好序的全局变量列表和它们最终的值到文件中,默认文件维awkvars.out
例:awk --dump-variables ''
--lint[=fatal]
检查程序的不兼容性或模棱两可的代码,参数fatal:将warning作为error
例:awk --lint '' /bin/ls
--profile[=file]
输出一发格式化之后的程序到文件,默认文件维awkprof.out
例:awk --profile=test.out 'BEGIN{printf "---|Header|--\n"}
{print}
END{printf "---|Footer|---\n"}' marks.txt
--traditional:禁止所有的gawk规范的扩展
--version:输出版本号
内置变量
NR:记录数量,在执行过程中对应当前行号
NF:字段数量,执行过程中对应当前行的字段数
$0:宝行执行过程中当前行的文本内容
$1:包含第一个字段的文本内容
$2:包含第二个字段的内容
FILENAM:表示正在处理的数据文件的名称
FS:字段分割字符,默认值是空格或者制表符
OFS:输出字段分隔符
RS:记录分隔符,默认为换行符
ORS:输出记录分隔符
例:awk '{printf $3 $4}' marks
输出第三和第四字段
awk '/a/' marks
输出包含a的行
#‘/pattern/’:匹配模式,正则表达式
awk ‘/a/ {print $3 "\t" $4}’ marks
输出包含a的
统计匹配模式的行数
awk '/a/ {++cnt} END{print "Count=",cnt}' marks.txt
打印超过18个字符的行
awk ‘length($0)>18’ marks
ARGC:输出命令行参数个数
例:awk 'BEGIN{ print "Arguments =",ARGC}' one two three four
ARGV:以数组的形式输出命令行参数
例:awk 'BEGIN{
for (i=0;i<ARGC;i++){
printf "ARGV[%d] = %s\n",i,ARGV[i]
}
}' one two three four
CONVFMT:数字的约定格式,默认是%.6g
例:awk 'BEGIN{ print "Conversion Format =%.6g",CONVFMT}'
OFMT:输出格式数字
例:awk 'BEGIN{print "OFMT = " OFMT}'
ENVIRON:环境变量的关联数值
例:awk 'BEGIN { print ENVIRON["PATH"]}'
FILENAME:当前用户名
例:awk 'END {print FILENAME}' marks.txt
FS:字段分隔符,默认空格或制表符,可以通过选项-F来使用
例:awk 'BEGIN{print "FS=" FS}' | cat -vte
或
awk -F: 'BEGIN{print "FS= " FS}' | cat -vte
NF:字段数量,执行过程中对应当前行的字段数
例:echo -e "one two\none two three\none two three four" | awk 'NF>2'
NR:记录数量,在执行过程中对应当前行号
例:echo -e "one two\none two three\none two three four" | awk 'NR>2'
操作符
算术操作符,加减乘除取余
+-*/%
指数:num^
或
num **
例: $ awk 'BEGIN { a = 50; b = 20; print "(a + b) = ", (a + b) }'
$ awk 'BEGIN { a = 50; b = 20; print "(a - b) = ", (a - b) }'
$ awk 'BEGIN { a = 50; b = 20; print "(a * b) = ", (a * b) }'
$ awk 'BEGIN { a = 50; b = 20; print "(a / b) = ", (a / b) }'
$ awk 'BEGIN { a = 50; b = 20; print "(a % b) = ", (a % b) }'
增减运算符
前自增:先自增,后赋值;前自减:先自减,后赋值
后自增:先赋值,后自增;后自减:先赋值,后自减
$ awk 'BEGIN { a = 10; b = ++a; printf "a = %d, b = %d\n", a, b }'
$ awk 'BEGIN { a = 10; b = --a; printf "a = %d, b = %d\n", a, b }'
$ awk 'BEGIN { a = 10; b = a++; printf "a = %d, b = %d\n", a, b }'
$ awk 'BEGIN { a = 10; b = a--; printf "a = %d, b = %d\n", a, b }'
赋值操作符
awk 'BEGIN' { NAME = "Jerry"; print "my name is ",NAME}
关系操作符
==
!=
<
<=
>
>=
例:awk 'BEGIN{ a=10;b=10;if(a==b) print "a == b"}
逻辑操作符
与或非
&&、||、!
例:awk 'BEGIN{
num=5;if(num>4 && num<6) printf "%d is in octal format\n",num}'
三元操作符
pattern?pattern:pattern
例:awk 'BEGIN{ a=10;b=20;(a>b)?max=a:max=b;print "max=" max}'
正则表达式操作符
匹配:~
不匹配:!~
例:tail -n 40 /var/log/nignx/access.log | awk '$0 ~ /ip\[123\.0\.0\.1\]/'
数组
语法:array_name[index]=value
删除数组
delete fruits["orange"]
例:awk 'BEGIN{
arr[0] =1;arr[1]=2;arr[2]=3';for (i in arr) printf"arr[%d] = %d\n",i,arr[i]
}'
流程控制
if(condition)
action
if(condition){
action-1
action-2
....
action-n
}
if(condition)
action-1
else if(conditon2)
action-2
else
action-3
例: awk 'BEGIN {
a = 30;
if (a==10)
print "a = 10";
else if (a == 20)
print "a = 20";
else if (a == 30)
print "a = 30";
}'
循环
主要语句
for,while,do...while,break,continue,exit
for(initialisation;condition;increment/decrement)
{action}
while (condition)
{action}
do
{action}
while(conditon)
例:
awk 'BEGIN{
sum=0;for(i=0;i<20;++i) {sum+=i;if(sum>50) break;else print "sum="},sum
}
}'
awk 'BEGIN{
for (i=1;i<=20;++i) {
if (i % 2 ==) print i;else continue
}
}'
awk 'BEGIN{
sum=0;for(i=0;i<20;++i){
sum+=i;if(sum>50) exit(10);else print "sum="sum
}
}'
双向连接
发送数据到另一个程序,然后读取结果,需要打开一个到另外一个进程的管道
符号:|&
#传递并保存数据,不输出到strout
双向管道包括from和to
例:close(to)
close(expr)
关闭管道
例:BEGIN {
cmd = "tr [a-z] [A-Z]"
print "hello, world !!!" |& cmd
close(cmd, "to")
cmd |& getline out
print out;
close(cmd);
}
getline
读取下一行内容
例:awk '{getline;print $0}' marks.txt
getline var < file
从file中读取,并存储在var中
command | getline var
将命令输出保存到var中
例:"date" | getline var
system
用于执行指定命令并返回退出状态
例:awk 'BEGIN{ret=system("date");print ret}'
自定义函数
function function_name(){
function body }
例:function add(num1,num2){result=num1+num2;return result}
BEGIN {res = add(10,20);print "10+20="res}
AWK入门的更多相关文章
- [转]shell awk 入门,中级,高级使用
awk很常用,对于我们在shell中分析log和file很有好处,很实用的东西,大家一起分享学习- 作为技术支持工程师,我们最最经常的工作就是要处理文本文件,不管是什么数据库最后都可以导成文本,我们就 ...
- AWK入门指南
一. AWK入门指南 Awk是一种便于使用且表达能力强的程序设计语言,可应用于各种计算和数据处理任务.本章是个入门指南,让你能够尽快地开始编写你自己的程序.第二章将描述整个语言,而剩下的章节将向你展示 ...
- 【Linux】AWK入门
什么是AWK AWK是一种用于处理文本的编程语言工具,一个模式匹配程序.一个典型的示例是将数据转换成格式化的报告. 在命令行输入如下awk命令: awk -F":" '{ prin ...
- shell awk入门
本文参考自 http://www.cnblogs.com/zhuyp1015/archive/2012/07/11/2586985.html awk:好用的数据处理工具 awk 也是一个非常棒的数据处 ...
- linux命令-awk入门
最近经常查看nginx日志,有时候需要做一些统计分析,于是就想起了awk,学习了就顺便做一个记录. 目录 概述:简单介绍awk背景原理 基本用法:常用到的awk语法 内建变量 综合实例 概述 awk是 ...
- awk入门【转】
awk其实不仅仅是工具软件,还是一种编程语言.不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了. 一.基本用法 awk的基本用法就是下面的形式. # 格式 $ awk 动作 文件名 # 示 ...
- awk 入门教程
作者: 阮一峰 日期: 2018年11月 7日 awk是处理文本文件的一个应用程序,几乎所有 Linux 系统都自带这个程序. 它依次处理文件的每一行,并读取里面的每一个字段.对于日志.CSV 那 ...
- awk入门及进阶
awk是Linux下优良的文本处理工具,有自成一体的编程语法规则,在循环和条件判断语句等方面和C语言很像. 其一般形式是:Pattern1 {ACTIONS; } Pattern2 { ACTIONS ...
- [转帖]awk 入门
awk其实不仅仅是工具软件,还是一种编程语言.不过,本文只介绍它的命令行用法,对于大多数场合,应该足够用了. http://www.ruanyifeng.com/blog/2018/11/awk.ht ...
随机推荐
- 面向对象编程之OC
面向对象概述 面向对象是一种符合人类思想习惯的编程思想.现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系,在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种 ...
- 配置 ROS 的 apt 源
配置 ROS 的 apt 源 ROS的apt源有官方源.国内 USTC 源或新加坡源可供选择, 选择其一就可以了,建议使用国内 USTC 源或新加坡源,安装速度会快很多. 方式一:官方源 $ sudo ...
- HttpRunner 接口自动化简单实践
1.安装 1.1 命令行pip直接安装就好 1.2 验证安装 命令行输入hrun -V,返回项目版本信息则表明安装成功 2.新建测试项目 这里我用直接通过框架的脚手架工具命令生成目录结构 如:hrun ...
- ATM Mechine (概率DP)
题意:去银行取最多K钱,想要全部取完,但是有个限制就是如果你输入取钱的额度超过了你已有的钱,那么会接受一次警告并无法取钱,然后求最多不超过w次警告的前提下你取完所有钱所需要的最少次数. 思路:概率DP ...
- vue 监听变量或对象
注意:监听的对象必须已经在data中声明了 data: { a: 1, b: 2, c: 3, d: 4, e: { f: { g: 5 } } }, watch: { a: function (va ...
- MySQL外键约束_ON DELETE CASCADE/ON UPDATE CASCADE
MySQL通过外键约束实现数据库的参照完整性,外键约束条件可在创建外键时指定,table的存储引擎只能是InnoDB,因为只有这种存储模式才支持外键. 外键约束条件有以下4种: (1)restrict ...
- if __name__ == "__main__":
工欲善其事,必先利其器 # 环境:Python3.6 + win10 # 目录结构: D:\test\ # 目录 ├─ t1.py # 文件 └─ t2.py # 文件 让模块如脚本一样运行 在Pyt ...
- Python sqlalchemy orm 多对多外键关联
多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...
- 基本数据类型大总结(int,str,list,dict,tuple)
python基本数据类型 int==>整数,主要用来进行数学运算 str==>字符串,可以保存单一数值 bool==>判断真假,true,false list==>存储大量数据 ...
- Linux统计系统文件类型出现的次数
awk '/^UUID/{fs[$3]++}END{for(i in fs) {print i,fs[i]}}' /etc/fstab /^UUID/ 匹配确定行范围