AWK使用总结8

127 阅读2分钟

引言

  • 本文主要补充介绍AWK中的语句的定义以及一些内置变量(不包含前面已经介绍的常用内置变量),仅供参考。
  • 本文介绍的主要的内置变量是RLENGTH与RSTART

内置变量RLENGTH与RSTART

  • RLENGTH和RSTART是在awk程序中用来处理正则表达式匹配的两个特殊变量,都是与match函数相关的,且与match函数搭配使用以在字符串中查找匹配的子串。
    • RLENGTH表示字符串中符合正则表达式模式的子串的长度
      • 注:RLENGTH是一个变量。当你使用 match() 函数时,它会自动设置为匹配子串的长度。如果没有找到匹配,RLENGTH 的值为 -1。
    • RSTART表示字符串中符合正则表达式模式的子串的起始位置
      • RSTART也是一个变量,当你使用 match() 函数时,它会自动设置为匹配子串在字符串中的起始位置。如果没有找到匹配,RSTART 的值为 0。 — 下图可以数一下,起始索引位置确实是第23,从1开始数且空格是计入索引位置的
awk 'BEGIN {match("hello,world is say by GPT-4", /GPT-4/); print "RSTART:"RSTART,"RLENGTH:"RLENGTH}'

语句(Statement)

  • 在awk中,语句是指一个完整的执行单元,可以是单个命令或一组命令的组合。
    • awk程序由一系列语句组成,每个语句都由一个或多个动作组成。
  • 通俗举例就是如下:
    • 基本语句是awk中最简单的语句,由一个pattern和一个action组成
      • 如:echo "1" | awk -F: '{print $1}'
    • 条件语句:就是if-else条件判断语句
      • if (condition) { action } else { action }
    • 循环语句:for,while等循环
      • for (i = 1; i <= 10; i++) { print i }
  • 补:关于printf语句像函数一样调用
  • 目前为止用的比较多的语句就是print,除此之外还有printf,delete,continue exit等,这些语句与函数不同,他们一般不带括号,也就不会在括号里写参数,而且是没有返回值的,但是printf有时候却可以像函数一样调用
echo 1 | awk '{printf("%s\n", "abc")}'

  • 在awk中,printf是一种特殊的语句,用于格式化输出。printf的语法格式与函数调用非常相似,因此在使用printf时可以像调用函数一样传递参数