shell 脚本学习 awk

格式

awk ' BEGIN{ print "start" } pattern { commands } END{ print "end" } file

这里写图片描述

特殊变量

[clz@localhost ~]$ echo -e "line1 f2 f3\nline2 f4 f5\nline3 f6 f7" | awk '{
print "Line no:"NR,"No of fields:"NF , "$0="$0, "$1="$1, "$2="$2, "$3="$3
}'
Line no:1 No of fields:3 $0=line1 f2 f3 $1=line1 $2=f2 $3=f3
Line no:2 No of fields:3 $0=line2 f4 f5 $1=line2 $2=f4 $3=f5
Line no:3 No of fields:3 $0=line3 f6 f7 $1=line3 $2=f6 $3=f7

外部值传递给awk

# -v将外部数值传入
[clz@localhost ~]$ echo | awk -v VARIABLE=$VAR '{ print VARIABLE }'
10000
# 多个外部变量传递给awk
[clz@localhost ~]$ var1="Variable1";var2="Variable2"
[clz@localhost ~]$ echo | awk '{ print v1, v2 }' v1=$var1 v2=$var2
Variable1 Variable2

上面的方法中,变量之间用空格分割,以键—值对的形式作为awk的命名行参数紧随在BEGIN,{},和END语句块之后

用getline读取行

[clz@localhost ~]$ seq 5 | awk 'BEGIN { getline; print "Read ahead first line", $0} { print $0 }'
Read ahead first line 1
2
3
4
5

使用过滤对awk处理的行进行过滤

这里写图片描述

字段定界符

awk -F: '{ print $NF }' /etc/passwd
awk 'BEGIN { FS=":" }{ print $NF }' /etc/passwd

从awk中读取命令输出

"command" | getline output;

ex:

[clz@localhost ~]$ echo | awk '{ "grep root /etc/passwd" | getline cmdout; print cmdout }'
root:x:0:0:root:/root:/bin/bash

通过使用getline , 将外部命令输出读入变量cmdout

在awk中使用循环

这里写图片描述

awk 内建字符串控制函数

这里写图片描述
这里写图片描述

统计词频

#!/bin/bash
# Filename: word_freq.sh

if [ $# -ne 1 ]
then
  echo "Usage: $0 filename";
  exit -1
fi

filename=$1

# 正则出单词安行输出
egrep -o "\b[[:alpha:]]+\b" $filename | \

awk '{ count[$0]++}
END{ printf("%-14s%s\n", "Word","count") ;
for ( ind in count)
{
  printf("%-14s%s\n",ind,count[ind]); }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值