使用 AWK(2)

AWK BEGIN用法

$ echo -e "line1\nline2" | awk 'BEGIN{ print "start"} { print } END { print "END" }'
start
line1
line2
END

特殊标记

$ echo -e "line1 f2 f3 \n line2 f4 f5\n line3 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

NR:当前行号 NF:当前行字段数量

$ seq 5 | awk 'BEGIN { getline; print "Read ahead first line", $0} {print $0}'
Read ahead first line 1
2
3
4
5

$0 表示当前行内容

设置字段定界符

$ awk 'BEGIN { FS=":" }{print $NF}' /etc/passwd
/bin/bash
/usr/sbin/nologin
/usr/sbin/nologin
/usr/sbin/nologin
/bin/sync

从 awk 中读取命令的输出

$ echo | awk '{ "grep root /etc/passwd" | getline cmdout; print cmdout }'
root:x:0:0:root:/root:/bin/bash

单词计数

#!/bin/bash

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

filename=$1

egrep -o "\b[a-zA-Z]+\b" $filename | \

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

}'

egrep -o 这一行将文本中每一个单词单独作一行输出,为了下面解析方便。

awk 对每行的一个单词计数,主要是利用关联数组的特性, count[$0]++

输出如下:

word          count
dfs           1
gds           2

转载于:https://my.oschina.net/lvyi/blog/531124

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值