awk合并文件

2019-03-09  本文已影响0人  赵会成

一个awk由三个部分组成:BEGIN语句块、END语句块和能够使用模式匹配的通用语句块

这三个部分是可选的,任何一个部分都可以不出现在脚本中。

awk 'BEGIN {statements} {statements} END {end statements}'

例如打印文件行数

awk 'BEGIN {i = 0} {i++} END {print i}' filename #三个部分

awk 'END{print NR}' filename #可只用第三个部分

wc -l filename | awk '{print $1}' #先计算 只显示行数

awk常用参数

NR:整个脚本当前已经读取过的记录数,就是行号,从1开始。随着所读文件的数目,一直累加。

FNR:同NR,不过是针对当前在读的文件记录数。每开始读一个新文件时,从1开始累加,相当于行号。读完一个文件后就会清0,新的文件又会从1开始。

FILENAME:当前文件名

$0:读取文件的当前行

$n(n>0):第n列数据

NR:一行记录的字段的数目,也就是列数。

TCL_P728M       TCL     74eda717a4aef660f362f1806eb85d9d

TCL_S720_JB2    TCL     ecb6724875f6361466f4e91df603f06c

TCL_P728M       TCL     f654f6d4f2157a658c0d7f688bb074b8

TCL_P728M       TCL     d8ed297d1a0a405434e49f66d00d92ae

TCL_P728M       TCL     5afcdd7b3eec3e15e636e3c7f249938a

d8ed297d1a0a405434e49f66d00d92ae        5

f654f6d4f2157a658c0d7f688bb074b8        2

74eda717a4aef660f362f1806eb85d9d        15

TCL_P728M       TCL     f654f6d4f2157a658c0d7f688bb074b8|2

TCL_S720_JB2    TCL     ecb6724875f6361466f4e91df603f06c

TCL_P728M       TCL     74eda717a4aef660f362f1806eb85d9d|15

TCL_P728M       TCL     5afcdd7b3eec3e15e636e3c7f249938a

TCL_P728M       TCL     d8ed297d1a0a405434e49f66d00d92ae|5

 awk   '{if(NR==FNR){a[$3]=$0} else{a[$1]=a[$1]"|"$2}} END{for(i in a) {print a[i]}}' push cru

awk 'NR==FNR{a[$3]=$0;next}{print a[$1]}' push cru #只显示匹配上的文件

awk 'NR=FNR{a[$3]=$0;next}{print a[$1]"|"$2}' push cru#前后两个文件都显示

上一篇下一篇

猜你喜欢

热点阅读