AWK学习

本文详细介绍了AWK的基本操作,包括基本命令行、显示列的方法、内置变量与函数、比较操作符、模式及数组的使用,并通过实例展示了如何在实际场景中应用AWK进行数据处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近学习了AWK的基本操作。以下是我整理的学习笔记。

基本的命令行:awk  -(选项) ‘{操作动作}’ 文件名

*************************************************************

$n显示列,$1表示第一列,$2表示第二列,$0表示所有的列,

print 表示打印:awk ‘{print $0}’ grade.txt  打印grade文件的所有列

以下是awk中的一些内置变量和内置函数

-V 赋值作用,写在引号前

awk -v rest=100 '{ print $1,$7*rest}' grade.txt

-F表示FS 字段的分隔符,默认为空格

use-f.txt #为分隔符

awk -F "#" '{ print $1, $2,$3}' use-f.txt

如果数据中的各列用2个以上的分隔符。  

awk -F "##|*%|sq" '{ print $1,$2,$3,$4}' use-f.txt

FIELDWIDTHS 以空格分隔的字段宽度

awk 'BEGIN{FIELDWIDTHS="3 6 9 12"}{ print $1,$2,$3,$4}' use-f.txt

FILENAME 当前正在处理的文件名,该变量不能在BEGIN块中使用

FNR 当前处理的记录号

IGNORECASE 如果该变量设置为非0值,在进行字符串匹配时忽略大小写

NF 当前记录中的字段个数

NR  已经读出的记录数

OFS 输出的字段分隔符,默认为空格

awk  'BEGIN{OFS="*"} {print $1,$2,$3,$4,$5,$6,$7}' grade.txt

ORS

输出的行分隔符

awk  'BEGIN{ORS="*"} {print $1}' grade.txt

RS

输入的行分隔符

index(st)函数返回目标字符串s中查询字符串t的首位置

awk  '{print $1,index($1,”abc”)}' grade.txt 返回abc出现的位置

length函数返回字符s字符长度

awk  '{print $1,length($1)}' grade.txt

substr(3个参数) 截取字符串

awk  '{print $1,substr($1,2,5)}' grade.txt 从第一列的第二个字符开始截取5个字符

substr(p,n) 截取字符串这种种形势是2个参数的,返回字段P的第n个字符开始到字符结尾的所有字符串

 

*******************************************************************************

比较操作符

<小于 >大于 ==等于!= 不等于 ~匹配正则表达式!~不匹配正则表达式

= += *= /= %= 为赋值操作

|| && 等同于 and or

几个实例

 awk ‘{if (FNR>=2 && FNR<=4){print $0}}’ 打印出第24

awk '{if ($4=="yellow") || $4~/brown/} {print $0}}' grade.txt

打印出第一列为yellow 或者第四列为brown的记录

awk ‘{if (FNR %2 != 0) {print $0}}’ grade.txt

隔行打印

******************************************************************************

模式

包括BEGIN END

BEGIN发生在浏览记录之前。可以处理初始化的代码,用于赋值或者打印头部

 awk 'BEGIN{print "Name       Belt\n----------------------------"}{print $1\”t”,$2}' grade.txt

 

ENDawk还提供了另一个特殊块,叫作END块。awk在处理了输入文件中的所有行之后执行这个块

END计算最终总和。

awk  '{sumof7=sumof7+$7}END {print sumof7}' grade.txt

关于数组的一个使用

如果第一列的NAME中有重复的值,现在要统计每个唯一NAME的第七列的总和,使用数组和END来操作

 awk ‘{aa[$1]=a[$1]+$7}END{for(k in aa) print k,aa[k]}’ grade.txt

数组

赋值

Array[1]=value

Array[2]=value

也可以用列来赋值

Array[$1]=$1

取值

For(a in array) print a,array[a]

可用来判断array中的唯一值

For(i=1;i<=len;i++) print array[i] len为数组长度

*******************************************************************************

条件语句

前面已经使用到的if语句

格式:

  if表达式

  语句1

  else

语句2

 

嵌套的if语句

if(表达式1

  {if(表达式2

  语句1

  else

  语句2

  }

  语句3

  else {if(表达式3

  语句4

  else

  语句5

  }

语句6

 

 

while语句

  格式为:

  while(表达式)

  语句

 

do-while语句

  格式为:

  do

  {

  语句

}while(条件判断语句)

 

for语句

  格式为:

  for(初始表达式;终止条件;步长表达式)

{语句}

awk whiledo-whilefor语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出。break 中断当前正在执行的循环并跳到循环外执行下一条语句。continue从当前位置跳到循环开始处执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值