awk命令使用整理

awk命令使用整理

awk学习笔记,以备遗忘。


awk ‘{print}’ hello.txt
花括号中为命令代码。执行该命令时对输入文件中的每一行执行>花括号中的代码。
也可以编写脚本 eg: 编写一个hello.awk的文件 内容为{print}
然后执行 awk -f hello.awk hello.txt 直接执行命令。
常用变量:
$number :
$1 第一个字段,$2第二个字段,$3第三个字段(注意不是行)$0表示整个当前行
FS 表示字段分隔符
NF 表示当前记录中的字段数量
NR 表示当前记录的编号(awk将第一个记录算作记录号1)
$NF表示一行数据最后一列的那个值

awk -F"," ‘{ print "OrgAddr: "$3, "\tDestAddr: "$4 }’ test.txt
表示以逗号分隔开,取以第3 和 第4个的字段打印并起名。
如果需要用到命令行脚本。那么需要用到FS变量
test.awk内容为:
BEGIN {
FS=“,”
}
{print "OrgAddr: "$3, "\tDestAddr: "$4 }
那么指令既为:awk -f test.awk test.txt ,其中FS还可以设置成正则表达式,其中这个BEGIN块指的是在awk开始处理输入文件之前会执行BEGIN块,因此 可以以此在内部设置初始化变量,打印页眉以及初始化其他全局变量
另外还有END块,既指在输入文件中的所有行之后执行这个块。
NF变量 字段变量 可以将该变量设置成当前记录中的字段数量
NF == 3{print $1,$2,$3}
NR变量 当前行号变量 可以取每行行号
eg :{print NR,NF,$1,$2,$3}
既输出 行号,该行字段个数,第一个字段,第二个字段,第三个字段
awk 支持正则表达式,以下是一个匹配行的形式
符合 这两个字段的变量 输出,否则不会输出
( $3 == “8613902700001” ) && ( $4 == “8613902700003” ) { print }
AWK 进阶:
1.处理多行记录(最多只能处理一个记录占用三行的文本)
特殊变量:
RS — 表示记录分隔符
OFS —表示输出字段分隔符,在两个单独的字段间插入定义的字符串
ORS —表示输出记录分隔符,在两个单独的记录间插入定义的字符串

在这里插入图片描述

此时为了达到这个效果
在这里插入图片描述

需要使用 FS RS命令:
BEGIN {
FS=“\n” ------再以\n 换行符切分字段
RS=“” ------先以分隔符分隔两段文本
} {
print $1 “, " $2 “, " $3
}
但是这样子很丑陋,他的中间”,“写的很难看,因此可加入OFS来优化:
BEGIN {
FS=”\n”
RS=“”
OFS=", "
}
{
print $1, $2, $3 ----注意这里改变了
}

在这里插入图片描述

刚才提到该写法只能处理三行的文本,因此需要进行字段数量的判别处理:
BEGIN {
FS=“\n”
RS=“”
ORS=“”
}{
x=1
while ( x<NF ) {
print $x “\t”
x++
}
print $NF “\n”
}

AWK中的 if 及循环 及数组判定条件语句if的使用如下:
{
if ( $1 == “foo” ) {
if ( $2 == “foo” ) {
print “uno”
}else {
print “one”
}
}else if ($1 == “bar” ) {
print “two”
}else {
print “three”
}
}
循环语句 有for循环及do while基本和java一致数组操作需注意,第一位是以1 开始的首先设置一个数组
在这里插入图片描述

同时便利改数组的时候,会发现它没有顺序,需注意
在这里插入图片描述

数组特殊用法,以字符串作为下标,也可以读取
在这里插入图片描述
删除数组元素 使用delete
delete fooarray[1]
AWK字符串函数:
awk首先不能使用字符串数组
eg:
在这里插入图片描述

因此需要使用到字符串函数
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值