Linux awk 命令

AWK是一种处理文本文件的语言,是一个强大的文本分析工具。

awk [选项参数] 'script' var=value file(s)

awk [选项参数] -f scriptfile var=value file(s)

注意:$0代表整行

变量名称 代表意义
NF 每一行($0)拥有字段总数
NR 目前awk处理的第几行
FS 目前分隔符,默认是空白

$NF代表最后一个字段的值
行匹配语句 awk '' 只能用单引号

基本用法

log.txt文本内容如下:

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

用法一:

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

实例

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

 # 格式化输出
 $ awk '{printf "%-8s %-10s\n",$1,$4}' log.txt
 ---------------------------------------------
 2        a
 3        like
 This's
 10       orange,apple,mongo

用法二:

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 'BEGIN{FS=","} {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 -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

用法四:

awk -f {awk脚本} {文件名}

实例:

 $ awk -f cal.awk log.txt

用法五:

cat PRODUCT_COMMISSION_INFO_log_2018-05-14 | grep tradeNoticeSendData | awk -F '-==-' '{if($4>"2018-05-14 19:35:00" && $4<"2018-05-14 21:44:00"){print $4,$13}}'  | wc -l

-F '-==-' 分隔完得到的变量可以做条件来选择,最后得到符合条件记录。

用法六:

统计TCP各状态的数量
netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'

扩展:

统计请求IP数量
netstat -n | awk '/^tcp/ {print $4}' | awk -F: '{print $1}' | awk '{++res[$1]} END {for(a in res) print a,res[a]}'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容