awk笔记

(一)简介

1.awk是一种处理文本文件的语言,是一个强大的文本分析工具;

2.常见用法:

log.txt

2 this is a test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

(1)用法一:

awk '[pattern] {action}' filenames   # '' 只能用单引号
例子如下:

# 每行按空格或TAB分割,输出文本中的1、4项
 $ awk '{print $1,$4}' log.txt
 ---------------------------------------------
 2 a
 3 like
 This's
 10 orange,apple,mongo

$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' log.txt    #命令
#输出
3 Are you

(2)用法二:

awk -F  #-F相当于内置变量FS, 指定分割字符

例子:

# 使用","分割
 $  awk -F, '{print $1,$2}'   log.txt
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple
# 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割
 $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
 ---------------------------------------------
 2 this test
 3 Are awk
 This's a
 10 There apple
 $  awk -F[:,], '{print $1,$2}'   log.txt #先用:,再用,分割
 ---------------------------------------------
 2 this is a test
 3 Are you like awk
 This's a test
 10 There are orange apple

(3)用法三:

awk -v  # 设置变量
例子:

$ awk -va=1 '{print $1,$1+a}' log.txt
 ---------------------------------------------
 2 3
 3 4
 This's 1
 10 11
 $ awk -va=1 -vb=s '{print $1,$1+a,$1b}' log.txt
 ---------------------------------------------
 2 3 2s
 3 4 3s
 This's 1 This'ss
 10 11 10s
(4)用法四:

awk -f awk脚本 文件名
例子:

$ awk -f cal.awk log.txt

3.awk脚本格式

#!/bin/awk -f
BEGIN { actions } #注意大小写
awk_pattern1 { actions } 
............ 
awk_patternN { actions } 
END { actions } 

(1)awk把输入文件的数据读入内存,然后操作内存中的输入数据副本,awk不会修改输入文件的内容;

(2)awk将读入的记录分割成字段,将第1个字段放入变量$1中,第2个字段放入$2,以此类推;字段分隔符使用shell环境变量FS或由参数指定;整条记录表示为$0;

(3)awk_cmd由两部分组成: awk_pattern { actions } ;

(4)把当前输入记录依次与每一个awk_cmd中awk_pattern比较,看是否匹配,如果相匹配,就执行对应的actions;如果不匹配,就跳过对应的actions,直到比较完所有的awk_cmd;

(5)一条awk_cmd的awk_pattern可以省略,省略时不对输入记录进行匹配比较就执行相应的actions;一条awk_cmd的actions 也可以省略,省略时默认的动作为打印当前输入记录(print $0) ;一条awk_cmd中的awk_pattern和actions不能同时省略;

(6)如果awk_script中只有BEGIN { actions } ,awk不会读取input_file;

(7)例子:

$ cat score.txt
Marry   2143 78 84 77
Jack    2321 66 78 45
Tom     2122 48 77 71
Mike    2537 87 97 95
Bob     2415 40 57 62
$ cat cal.awk
#!/bin/awk -f
#运行前
BEGIN {
    math = 0
    english = 0
    computer = 0
 
    printf "NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL\n"
    printf "---------------------------------------------\n"
}
#运行中
{
    math+=$3
    english+=$4
    computer+=$5
    printf "%-6s %-6s %4d %8d %8d %8d\n", $1, $2, $3,$4,$5, $3+$4+$5
}
#运行后
END {
    printf "---------------------------------------------\n"
    printf "  TOTAL:%10d %8d %8d \n", math, english, computer
    printf "AVERAGE:%10.2f %8.2f %8.2f\n", math/NR, english/NR, computer/NR
}
$ awk -f cal.awk score.txt
NAME    NO.   MATH  ENGLISH  COMPUTER   TOTAL
---------------------------------------------
Marry  2143     78       84       77      239
Jack   2321     66       78       45      189
Tom    2122     48       77       71      196
Mike   2537     87       97       95      279
Bob    2415     40       57       62      159
---------------------------------------------
  TOTAL:       319      393      350
AVERAGE:     63.80    78.60    70.00

(二)语法

1.awk_pattern

(1)决定actions部分何时触发;

(2)常见的awk_pattern:正则表达式,布尔运算;

(3)例子:


2.awk_action

(1)对awk读取的记录数据进行的操作;actions由一条或多条语句或者命令组成,语句、命令之间用分号(;)分隔;actions中还可以使用流程控制结构的语句;

(2)常见命令有:print(打印),next(处理下一条记录),nextfile(处理下一个文件),exit(退出);

(3)例子:


3.赋值语句

(1)赋值语句主要有3种:直接赋值,表达式赋值,累加符号(c风格);

(2)例子:


4.流程控制

① if (condition) {then-body} [else {else-body}] 
② while (condition) {body} 
③ do {body} while (condition) 
④ for (initialization; condition; increment) {body} 
⑤ break : 跳出包含它的for、while、do-while 循环 ;
⑥ continue : 跳过for、while、do-while循环的body的剩余部分,而立刻进行下一次循环的执行;

5.函数

function fun_name (parameter_list) // parameter_list是以逗号分隔的参数列表 


          body-of-function // 函数体,是awk语句块 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值