awk相同列求和及NR、FNR用法

1,计算多列相同项之和

cat sum.txt

a a 2

b b 3

c c 6

a a 8

d d 9

d d 9

前二列相同,第三列相加:

awk '{a[$1" "$2]+=$3}END{for (i in a){print i" "a[i]}}' sum.txt

a a 10

b b 3

c c 6

d d 18

前二列相同,第三列相加,并计算相同项次数:

awk '{a[$1" "$2]+=$3;b[$1" "$2]++}END{for (i in a){print b[i],i,a[i]}}' sum.txt

2 a a 10

1 b b 3

1 c c 6

2 d d 18

NR,表示awk开始执行程序后所读取的数据行数.

FNR,与NR功用类似,不同的是awk每打开一个新文件,FNR便从0重新累计.

2,再看一个例子关于NR和FNR的典型应用:

#cat a.txt

01 语文

02 数学

03 英语


#cat b

语文 周一

英语 周二

数学 周三


awk 'NR==FNR{a[$2]=$0;next}{print a[$1],$2}' a.txt b.txt

awk '{a[$2]=$0}NR>FNR{print a[$1],$2}' a.txt b.txt

输出结果为如下:

01 语文 周一

03 英语 周二

02 数学 周三

你可能感兴趣的:(awk,NR,FNR)