awk 初学01

本文介绍了awk命令的基础用法,包括通过`awk -f`或直接在命令行执行awk语句,讲解了BEGIN和END块的作用。重点讨论了如何处理文件内容,如字段分隔符(FS)、记录结束符(RS)的设置,以及`print`、`if`条件判断和正则表达式的应用。此外,还提到了awk中的变量如NF、NR,以及如何统计文件中的空行。循环结构(do-while, while, for)和数组也在文中有所提及。" 53705214,5767962,D3D11 SDK教程:纹理映射与常量缓冲区解析,"['图形编程', 'Direct3D', '游戏开发', '纹理处理', '缓存技术']
摘要由CSDN通过智能技术生成

环境是在linux下


file.awk文件可以直接在命令行下通过  awk -f file.awk [file path] 来运行

当然awk语句可以直接在命令行下使用


目前学到得东西:

整体分为:

BEGIN {
}
{
}
END {
}

其中BEGIN是在对文件处理之前,进行的一些初始化,定义,规范之类的。

第二个部分主要就是对文件的处理行为。

END是对文件处理完成之后做的事情。


awk '{print $0}' /etc/passwd

这样可以直接在终端运行,显示出/etc/passwd中得内容  $0就是对应文件每行的内容  $1 $2 就是第一个参数,第二个参数  置于分隔符,可以在文件file.awk中通过FS来设置或者通过在命令行通过-F来设置 ,如:awk -F":" '{print $0} /etc/passwd  这样就是根据 ":”  来分割成不同的$1 $2...

对于print动作,当然也可以输出与文件内容无关的东西,这个无所谓。过程就是对文件的每一行都执行同样的动作。

关于print  这个和C相似,但是更简单一些。不用格式可以直接输出。如果输出多个可以这样:print $1 "\t" $2 "\t content" 。


对于file.awk

一些常见的变量

NF:显示字段数量,就是多少行,通过这个变量可以控制你所要输出的某些航

NR:记录号,每个字段的参数数量,就是$0 $1 $2....最后一个可以是哪个


FS:来设置分隔符

RS:来设置字段结束的位置 和FS一起使用可以根据将几行当做一个记录来处理


/indexId/ {print $0}  这样输出包含indexId的字段

可以使用if来改写这个

if($1 ~/indexId/) {
	print $0
}

在awk中~表示匹配的意思  !~表示不匹配

if($0 !~ /indexId) 这样就可以输出 所有不包含indexId的所有字段

awk中可以使用C中得运算符和逻辑符号

允许if的嵌套,这样由C转过来学习awk的人就会很容易掌握。


一个可以统计一个文件中有多少空行的小代码:

BEGIN{
    x=0
}
{
    if($0 ~/^$/){
        x+=1
    }
}
END {
    print x
}

/^$/ 就是这个字段开始就是$,$就是结束符的意思


在awk中所有的变量都是字符串化的

x="2.01"
y=3.00

这样x+y是可以直接计算的,按照浮点进行计算并返回结果。



关于FS RS

FS用来设置分隔符,可以使用正则里边的东西

比如:

FS="\t+"
FS="[[:space:]+]"
第一个是以多个tab来作分隔符

第二个是以多个空格来做分隔符

如果以及几个数字做分隔符可以这样

FS="[0-9]+"
这样就是以几个数字作为分隔符


如果我们希望把多行当做一个整体可以使用FS RS一起实现

BEGIN {
    FS="/n"
    RS=""
}
每一行当做一个参数,一个空行作为结束

OFS ORS

如果我们希望在输出时候,中间插入某些特定的符号,以区分输出的字段

可以设置OFS,不设置,默认是直接连接。

在  BEGIN中设置即可

ORS 是用来区分字段的,默认是换行。


循环

do {

}while();

while() {

}

BEGIN {
        OFS=" "
        mystring = "How are you doing today?"
    }

for(x=1;x<10;x++){}

这三个和C并没有区别,注意里边的语法就可以了。


awk同样支持数组,array[0]="jdkjaf"

遍历数组

for(x in array) {
    print array[x]
}

这样可以把数组中得内容输出出来,但是这样有个问题就是x不一定是从1开始,他开始的位置是随机的,进行一次遍历,可能是1-9  可能是  4-9-3这样

判断某一个下标的元素是否存在于数组中,可以是用in来判断

awk的格式化输出printf() sprintf()  和C语言的相同。

awk的字符串操作:

      print length(mystring)
      print index(mystring, "you")
      print tolower(mystring)
      print toupper(mystring)
      print substr(mystring, 9, 3)
  
      print match(mystring, /you/),RSTART,RLENGTH
  
      sub(/o/, "O", mystring)
      print mystring
      mystring = "How are you donging today?"
      gsub(/o/, "O", mystring)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值