text Shell awk文本处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了text Shell awk文本处理相关的知识,希望对你有一定的参考价值。

# 例1: 同时使用BEGIN, 循环, END块
$ echo -e "line1\nline2" | awk 'BEGIN{ print "Start" } { print } END{ print "End" } '
Start
line1
line2
End

# 例2: 使用变量
$ echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3 ; }'
v1 v2 v3

# 例3:指定输出分隔符
$ echo | awk '{ var1="v1"; var2="v2"; var3="v3"; print var1 "-" var2 "-" var3 ; }'
v1-v2-v3
$ echo | awk 'BEGIN{OFS="-"} { var1="v1"; var2="v2"; var3="v3"; print var1,var2,var3; }'
v1-v2-v3

# 例4: awk内置变量使用
$ echo -e "line1 f2 f3\nline2 f4 f5\nline3 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

# 例5: awk循环累加计数例子
$ seq 5 | awk 'BEGIN{ sum=0; print "Summation:" }
{ print $1"+"; sum+=$1 } END { print "=="; print sum }'
Summation:
1+
2+
3+
4+
5+
==
15

# 例6; awk根据pattern过滤输入行
$ awk 'NR < 5' # 行号小于5的行
$ awk 'NR==1,NR==4' # 行号在1到5之间的行
$ awk '/linux/' # 包含样式linux的行(可以用正则表达式来指定模式)
$ awk '!/linux/' # 不包含包含模式为linux的行

## 例7: awk多条件

$ awk -F '[/]' 'NR > 1 && $(NF) > "201907162000" {print $0}'
# 或是||

awk语法:
awk '[BEGIN{ print "start" }] ['pattern'] [{ commands }] [END{ print "end" }]' [file]

也就是说里面的所有的子句都是可以省略的.

===================================

[可选]awk开始块:
通常在里面进行变量定义及初始化, 表头打印等操作.

[可选]awk带模式匹配的循环体:
模式匹配指的是pattern, 用于对awk的输入行进行过滤, 可以是正则表达式, 条件语句或者行范围
commands是对awk输入行的每一行(经过过滤的)进行操作的, 缺省动作是打印整行.

[可选]awk结束块:
通常可以在里面进行统计操作, 例如行数统计, 或者打印表尾.

========================

awk中的特殊变量:
- NR: 输入行号
- NF: 当前行字段数, $(NF-1)代表倒数第二个字段
- $0: 当前行内容
- $1: 当前行第一个字段内容

========================

awk指定输入输出分隔符:
$ awk -F':' '{ print $NF }' /etc/passwd
或者
awk 'BEGIN { FS=":" } { print $NF }' /etc/passwd

OFS="delimiter"设置输出字段的定界符

例如: awk -F'[=/]' '{print $2}'

=========================

awk内建字符串函数:
详见: linux脚本攻略第二版p140
length(stirng)

以上是关于text Shell awk文本处理的主要内容,如果未能解决你的问题,请参考以下文章

text Shell grep,awk,sed,cut文本处理对比

shell的文本三剑客awk

自动化运维必须要学的Shell文本处理三剑客之——awk用法(超多案例详细介绍)

shell脚本-awk

shell脚本-awk

shell脚本——正则表达式Sed与Awk文本处理工具详解