欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

AWK 用法总结

程序员文章站 2022-07-12 15:35:16
...

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)得到数组的长度;

相关标签: AWK