AWK 用法总结

AWK 用法总结

语法: awk [Options] ‘script’ var=value files
常用命令选项:

  • -F fs fs指输入指定的分隔符
  • -v var=value 赋值一个用户定义变量
  • -f script 从脚本中读取awk命令

awk简介:
操作由一个或者多个命令、函数、表达式组成、之间有换行符或者分号隔开,并且位于大括号内

awk ‘BEGIN{print “start”} pattern{command} END{print “end”}’ file
一个awk脚本通常由 BEGIN语句块 、 pattern语句块 、 END语句块 三部分组成,这三部分是可选的,任意一个部分都可以不出现在脚本中,脚本通常在单引号或双引号中

例子:
awk ‘BEGIN{i=0} {i++} END{print i}’ filename
awk ”BEGIN{i=0} {i++} END{print i}” filename

awk工作原理:
awk BEGIN{print “start”} pattern{command} END{print “end”}’

  1. 执行 BEGIN 中的语句块
  2. pattern 逐行扫描文件,从第一行至最后一行,重复处理过程
  3. 当读至输入流末尾时,执行END{}语句块

awk内置变量:

  • $n 当前记录的第n个字段
  • $0 当前行的文本内容
  • NR 表示记录数
  • FS 表示字段分隔符,默认为空格
  • NF 表示字段数
  • OFS 输出字段分隔符
  • RS 记录分隔符,默认是换行符
  • ORS 输出记录分隔符

举例:

awk "{print $2 , $3}"  filename   打印每一行的第二和第三个字段
awk  "END{print NR}"  filename  统计文件中的行数

var=10000
echo | awk -v varrable=$var  "{print variable}"


var1="aaa"
var2="bbb"
echo | awk "{print v1 , v2}" vi=$var1 v2=$var2

awk算术运算符:

  • ± 加减
  • */& 乘除求余
  • ±! 一元加减逻辑非
  • ^*** 求幂
  • +±- 增加或减少

awk “BEGIN { a=“b” ; print a++ , ++a;}”
注意: 所有用作算术运算符额操作,操作数自动转换为数值,所有非数值都变为0

赋值运算符:
= += -= *= /= %= ^= *=
逻辑运算符:
|| &&
正则运算符:
~ ~!
awk "BEGIN {a=“100test” ; if(a ~ /^100
/){print “ok”}}"
关系运算符:
< <= >= != ==
awk “BEGIN {a=10 ; if(a >= 9){print “ok”}}”

//awk高级输入输出: next
awk 'NR%2==1{next}{print NR , $0;}'  text.txt
next 语句一般用于多行合并

//awk getline 用法:
awk "BEGIN{“”date“ | getline out; print out”}"   //执行linuxdate命令,并将结果管道给getline,把输出值赋值给自定义变量,并打印
awk “BEGIN{ "date" | getline out; split(out , mon); print mon[2]}”  //分割
awk "BEGIN{while("ls" | getline) print)}"   等于  awk "BEGIN{while("ls" | getline out){ print out})}"  

//输出到一个文件中:
echo | awk '{ print ("hello world") > filename}'
echo | awk '{ print ("hello world") >> filename}'

//设置字段定界符: 默认为空格
awk  -F : '{print $NF}'  /etc/passwd
awk 'BEGIN{ FS=":" } { print &NF}'   /etc/passwd

awk 中可使用 while do-while for if break continue exit等语句,与C语言保持一致,每句之间用;结尾
awk 数组:
awk中数组不必提前声明,也不必声明大小。数组元素用0或空字符串来初始化

数字做索引下标:
arra[1] = “sun”
arra[2] = “kai”

字符串做数组索引:
arra[“first”] = “www”
arra[“lat”] = “name”

读取数组的值
{ for (item in array){print array[item]};} 输出顺序是随机的
{for (i = 1 ; i< len; i++){ print array[i]}} len 是数组的长度 length(array)得到数组的长度;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT界的希望

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

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

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

打赏作者

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

抵扣说明:

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

余额充值