awk命令之基础篇

基本命令

awk‘{action}‘ 输入文件 无条件执行action
awk ‘/pattern/{action}‘ 输入文件 pattern匹配时执行action
awk ‘(condition){action}‘ 输入文件 condition成立时执行action
awk '/李四/{print $0}' tmp//输出含有‘李四’关键字的一行记录
2 李四 70
awk '/^2/{print $0}' tmp//输出以2开头的一行记录
2 李四 70

关于字段:

awk命令会读入的每一行分割成多个字段,每一字段是由指定或默认分隔符分开,默认的分隔符是tab和空格,可以用$1,$2,等的形式访问对应字段,字段都是从1开始的,而$0表示整个行

内置变量

$0 当前的一行记录
$1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符,默认是空格
RS 输入记录分隔符,默认为换行符
OFS 输出字段分隔符 默认也是空格
ORS 输出记录分隔符,默认为换行符
NF 当前记录中的字段个数
FNR 处理过的文件行数,仅限当前文件
NR 处理过的文件行数,多个文件累加
ARGC 命令行参数个数
ARGV  命令行参数数组
FILENAME 当前输入文件的名字
IGNORECASE  设置匹配时是否忽略大小写
ENVIRON UNIX环境变量
ERRNO UNIX系统错误消息
CONVFMT 数字到字符串的转换格式
OFMT 设置数字的输出格式
RSTART 被匹配函数匹配的字符串首
RLENGTH  被匹配函数匹配的字符串长度
FIELDWIDTHS 输入字段宽度的空白分隔字符串
ARGIND 当前被处理文件的ARGV标志符
tmp文件内容有:id,name,score
awk '{print FILENAME,ARGC,ARGV[0],ARGV[1]}' tmp
tmp 2 awk tmp

awk -F ',' '{print NF,FS,FNR,FS,NR,RS}' tmp tmp
ps:-F,指定逗号为字段分隔符
3 , 1 , 1

3 , 1 , 2

 awk '{print ENVIRON["PATH"]}' tmp
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

awk '{CONVFMT="%f";printf "%s\n",0.11}' tmp
0.110000

awk '{OFMT="%0.2f";print 1/3}' tmp
0.33

awk '{match("tmp123tmp", /123/); print RSTART,RLENGTH}' tmp
4 3

运算符

=,+=,-=,*=,/=,%=,^= 赋值语句
|| 逻辑或
&& 逻辑与
~ ~!  匹配正则表达式和不匹配正则表达式
<,<=,>,>=,!=,== 关系运算符
+,-,*,/, 加减乘除
**,^ 求幂
! 逻辑非
++,-- 自增,自减
$ 字段引用
空格 字符串连接符
?: C条件表达式
in 数组中是否存在某键值
in ?:
awk 'BEGIN{a[1];a[2];print 1 in a?"存在":"不存在"}'
存在

正则匹配:
awk  -F "," '{if($3~/70/) printf "%s score %d\n",$2,$3}' tmp
李四 score 70

幂:
awk -F "," '{tmp=$3^2;if(tmp>=6400) printf "%s score %d\n",$2,$3}' tmp
王五 score 80

空格:
awk 'BEGIN{print "1" "2"}'
12
awk 'BEGIN{print "1","2"}'
1 2

数组

awk的数组是一组键值对,数组的下标可以是数字和字母,值和关键字都存储在内部的一张针对key/value应用hash的表格里。

awk 'BEGIN{
a[z]="sky123";
print a[z];
}'
sky123

重定向

awk 'BEGIN{print "1" >> "1.txt"}' | cat 1.txt
1

ls |awk 'FS==" "{print 1}'
1

流程控制语句

break 当 break 语句用于 while 或 for 语句时,导致退出程序循环。continue当 continue 语句用于 while 或 for 语句时,使程序循环移动到下一个迭代。next能够导致读入下一个输入行,并返回到脚本的顶部。这可以避免对当前输入行执行其他的操作过程。exit使主输入循环退出并将控制转移到END(如果END模块存在的话)。如果没有定义END模块,或在END中应用exit语句,则终止脚本的执行。

BEGIN和END

awk '
    BEGIN { action }
    /pattern/ { action }
    END { action }
' 输入文件
awk '
BEGIN{print "begin"}
/张三/{print $0}
END{print "end"}
' tmp

begin
1,张三,60
end

if:

if (condition1) {
    action1
} else if (condition2) {
    action2
} else {
    action3
}
awk 'BEGIN{
if(FNR==1) print 1;
else print 2;
}'
2

while

while(condition){
    action3
}
awk 'BEGIN{a=1;
while(a<5){
a++;
if(a>3) break;
}
print a;
}'
4

for

for(变量 in 数组){
action3
}

for(变量;condition;expression){
action3
}

awk 'BEGIN{
a[1]=100;
a[2]=200;
a[3]=300;
for(i in a){
if(i==2) continue;
print a[i];
}
}'
100
300

awk 'BEGIN{
a[1]=100;
a[2]=200;
a[3]=300;
for(i=1;i<=3;i++){
if(i==3) exit;
print a[i];
}
}'
100
200

do

do{
action3
}while(condition)
awk 'BEGIN{a=1;
do{
a++;
}while(a<5)
print a;
}'
5
时间: 2024-11-05 19:37:35

awk命令之基础篇的相关文章

awk命令之进阶篇

内置函数 数学函数 atan2(y,x) 计算y/x的反正切 cos(x) 计算x的余弦:x是弧度 sin(x) 计算x的正弦:x是弧度 exp(x) 计算e的x幂 log(x) 计算x的自然对数 sqrt(x) 计算x平方根 int(x) 计算x的截断至整数的值 rand() 返回一个随机数,范围0~1,小于1 srand(x) 设置rand函数的种子值,省略参数则使用时间作为参数.返回先前的种子值 awk'BEGIN{printexp(1)}' 2.71828 awk'BEGIN{print

awk(一)基础篇

上一篇总结了下sed的用法,这一篇玩玩sed的好基友awk,学完它俩,以后就再也不用怕处理文本文件了. awk其实和sed处理过程差不多,都是面向字符流的.sed和awk都相当于是一个加工厂,输入的文本行,相当于原材料,原材料在工厂中经过一系列处理.然后输出成品. awk和sed不同的是,awk更加的强大了,基本上可以说大多数sed能够实现的功能,awk都可以实现.... 但是实现相同的功能,大多情况下sed的过程更加的简洁吧. 当然awk还有着更多的功能,awk本身就是一门类C的语言了,有变量

北大,awk 命令基础练习

北大,awk 命令基础练习 Red Hat Enterprise Linux Version 5.3 Get the latest news about the world's Open Source Leader Red Hat Network Manage your system dffectively through Red Hat Network Global Learning Services You've got Red Hat Enterprise Linux,now get th

linux基础学习-18-linux三剑客之awk命令精讲

快捷跳转目录: * 第1章:awk基础入门       * 1.1:awk简介 * 1.2:学完awk你可以掌握: * 1.3:awk环境简介 * 1.4:awk的格式 * 1.5:模式动作 * 1.6:awk的执行过程 * 1.6.1:小结awk执行过程 * 1.7:记录和字段 * 1.7.1:记录(行) * 1.7.2:记录分隔符-RS * 1.7.3:对$0的认识 * 1.7.4:企业面试题 * 1.7.5:awk记录知识小结 * 1.7.6:字段(列) * 1.7.7:ORS与OFS简介

Linux运维之路 基础篇:Linux基础命令(一)

Linux运维之路 基础篇:Linux基础命令(一) Linux哲学宗旨: 一切皆文件:把几乎所有的资源,包括硬件设备都组织为文件 有众多单一的小程序组成,一个程序制实现一个功能,组成小程序完成复杂操作 尽量避免和用户交互:实现脚本编程,以自动完成某些功能 使用纯文本文件保存配置信息 终端:用户和主机交互时用到的设备 物理终端:直接接入的设备也叫控制台/dev/console 虚拟终端:附加在物理终端上虚拟出的,默认启动六个,Ctrl+Alt(F1~F6),系统启动时,默认启动虚拟终端1,启动终

基础命令使用[win篇]

基础命令使用 [ win篇 ] 2017-11-05 WIN CMD 0x01 基础命令使用: 演示环境: 1 2 win2008R2cn ip: 192.168.3.23 假设为入侵者机器 win2012R2cn ip: 192.168.3.122 假设为目标机器 1 2 3 4 5 6 # whoami /all 查当前用户在目标系统中的具体权限,这可能会成为你一上来的习惯性动作 ^_^ # query user 查当前机器中正在线的用户,注意管理员此时在不在 # hostname 查当前机

Linux基础篇之五基础命令 ----1

本文主要介绍处理目录的常用命令,并且对每个命令及参数一一举例说明. 处理目录的常见命令有: ·ls    list,列出指定目录下的内容 ·cd    Change Directory,更改目录 ·pwd    Print Working Directory,查看当前工作目录的完整的绝对路径 ·mkdir   Make Directory,创建空目录 ·rmdir   Remove Directory,移除空目录 ·rm    Remove,移除文件和目录 ·cp     Copy,复制:遵从一

awk:基础篇+案例

awk提供了很强大的功能,它是linux中功能最强大的数据处理引擎之一,它不仅可以对文本数据进行搜索分析处理排序,还可以支持数学运算,含有内置函数和内置变量,甚至还可以进行一些脚本处理,编程.可以这么说,它可以根据发挥者的能力来起作用. awk在linux中其实并不叫awk,而叫gawk [[email protected] ~]# which awk /bin/awk [[email protected] ~]# ls -l /bin/awk lrwxrwxrwx. 1 root root 4

Linux安全基础:awk命令的使用

awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理. awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gawk,gawk 是 AWK 的 GNU 版本. 1.语法 awk '{pattern + action}' {filenames} 尽管操作可能会很复杂,但语法总是这样,其中 pattern 表示 AWK 在数