Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

对于文本中每一行(匹配Pattern的部分)根据分隔符划分,并做action操作

分隔符可指定,默认空格或tab

比如

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 '' 只能用单引号
# 或者可以管道传入要处理的文本
ls -i |awk '{print $1}'

实例:

# 每行按空格或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
 

-F 指定分割字符 变量

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
 
 # 使用多个分隔符.先使用空格分割,然后对分割结果再使用","分割(看-F ''中传递的字符,第一个是空格,第二个是,)
 $ awk -F '[ ,]'  '{print $1,$2,$5}'   log.txt
 ---------------------------------------------
 2 this test
 3 Are awk
 This's a
 10 There apple
 # 分割结果这样:
2 this is a test
3 Are you like awk
This's a test
10 There are orange apple mongo

-v 设置变量,可用于分割结果的拼接或计算

awk -v  # 设置变量

实例:

 $ awk -va=1 '{print $1,$1+a}' log.txt # 设置变量a
 ---------------------------------------------
 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

设置了变量b和a

$1b 表示拼接

$1+a 表示如果$1是数字则做计算,否则就是a

-f awk脚本

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

实例:

 $ awk -f cal.awk log.txt

常用

给每行行尾添加字符

awk ‘{print $0 “A”}’ filename
给filename每行尾添加字符A

删除每行最后10个字符 sub替换成空字符串

awk ‘{sub(/.{10}$/,””); print $0 }’ filename
$匹配行末位置,.匹配任意一个非换行字符

替换字符串 gsub

awk ‘{ gsub(/AAAA/,”BBBB”); print $0 }’ filename
把字符串AAAA替换成BBBB

评论