awk中的变量

awk中的变量定义非常简单,只需要给出一个变量名并且赋予适当的值即可。

awk中的常规变量分为两种类型:字符串和数值。无需指定变量类型,awk会根据变量所处的环境自动判断。如果没有指定值,数值类型的变量默认等于0,字符串类型的变量默认为空。

awk中的系统内置变量总结如下,有一点要事先说明:awk说明中,记录表示一个样本,字段表示特征。

变量 说明
$0 记录变量,表示当前正在处理的记录,整条记录作为一个字符串
$n 字段变量,n可以为1,2,...表示第几个字段(特征)
NF 整数值,表示当前记录的字段数
NR 整数值,表示awk已经读入的记录数
FILENAME 正在处理的文件名
FS 字段分割字符,默认是空格或是tab
RS 记录分隔符,默认是换行符

说明:$0是当前处理的一整条记录(包含多个字段),而且作为字符串处理;上面已经用过$2;FS和RS比较有用,下面单独说明。

RS是文件中记录换行的标识,默认为\n换行符,但是有些文件不是用换行来记录的,这个时候需要自己设置。注意设置的时候最好使用BEGIN匹配模式,还记得吗?BEGIN模式优先于所有处理文件之上执行,我们必须先设置换行标识,然后再处理文件。

#-----------------------------/chapter11/ex11-14.sh------------------
#! /bin/awk -f

BEGIN {
     #定义记录分隔符
     RS=""
   }

   {
      print
      print "=========================================="
   }
  

上面定义字段换行标识符FS为空字符串,即把空白行作为换行。

FS是文件中的字段分隔标识符,默认是空格或制表符tab,实际上我们可能使用其他的字符。我们同样在BEGIN匹配模式中指定。

#-----------------------------/chapter11/ex11-15.sh------------------
#! /bin/awk -f

BEGIN {
   #定义记录分隔符
   RS=""
   #定义字段分隔符
   FS="\n"
}
#输出第1个字段
{ print $1 }

看到了吧,输出每个字段的使用$n,定义的是换行为字段分隔符。

参考:

《Shell从入门到精通》

时间: 2024-12-16 23:34:07

awk中的变量的相关文章

精通awk系列(14):细说awk中的变量和变量赋值

回到: Linux系列文章 Shell系列文章 Awk系列文章 awk变量 awk的变量是动态变量,在使用时声明. 所以awk变量有3种状态: 未声明状态:称为untyped类型 引用过但未赋值状态:unassigned类型 已赋值状态 引用未赋值的变量,其默认初始值为空字符串或数值0. 在awk中未声明的变量称为untyped,声明了但未赋值(只要引用了就声明了)的变量其类型为unassigned. gawk 4.2版提供了typeof()函数,可以测试变量的数据类型,包括测试变量是否声明.

awk中使用shell变量

其实在awk里,是不能直接使用shell变量的 方法是:awk -v 选项让awk 里使用shell变量 TIME=60 awk -v time="$TIME" 'BEGIN{FS="|"} {if ($7>time) print $2 }' 这样要注意:在awk里,time不能加$符号. 网上说如下方法都可行: 一:"'$var'" 这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如: var="test&quo

awk中的模式匹配

awk中的模式匹配在awk程序命令中非常重要,它决定着被处理数据文件中到底哪一行需要处理,并且做出什么样的处理. 首先,我们先看awk命令的基本语法:awk pattern { actions }   注意:pattern就是指的匹配模式,大括号外加两端空格的是处理动作. 上面awk后面的匹配模式和处理行为至少得有一个,不能两个同时缺失.例如,上篇博文中awk { print }   就表示只做输出到屏幕的处理动作,由于没有匹配模式,那么所有行都需要被输出. 实际上,我们在使用awk的时候,大部

awk中匹配shell变量字符

遇到问题: 现在有两个脚本,我想 将file1中的内容按file2来匹配 [[email protected] home]# cat file1 3-1-1 POTV=1,POTA=0,POTP=2 1-4-76 POTV=1,POTA=0,POTP=1 2-1-2 POTV=1,POTA=1,POTP=1 3-1-4 POTV=1,POTA=1,POTP=2 4-1-5 POTV=1,POTA=1,POTP=2 7-1-2 POTV=1,POTA=1,POTP=2 3-1-10 POTV=1,

Linux下如何让 awk 使用 Shell 变量

当我们编写 shell 脚本时,我们通常会在脚本中包含其它小程序或命令,例如 awk 操作.对于 awk 而言,我们需要找一些将某些值从 shell 传递到 awk 操作中的方法.那么如何让 awk 使用 Shell 变量呢?兄弟连Linux培训接下来为大家介绍一下: 有两种可能的方法可以让 awk 使用 shell 变量: 1. 使用 Shell 引用 让我们用一个示例来演示如何在一条 awk 命令中使用 shell 引用来替代一个 shell 变量.在该示例中,我们希望在文件 /etc/pa

在awk中通过system调用sql语句来说明引号的使用

一个实际应用例子: 在awk中,通过system调用连接数据库并作select操作,select语句中where条件来自于一个文件(file)的第一个域($1). $ cat file ... 1001 1002 1003 1004 ... 1. 用awk实现: awk '{system("mysql -u root -proot mydatabase -Bse \"select id,name from tables where id=""\047"$1

awk内置变量 awk有许多内置变量用来设置环境信息,这些变量可以被改变,下面给出了最常用的一些变量。

ARGC 命令行参数个数 ARGV 命令行参数排列 ENVIRON 支持队列中系统环境变量的使用 FILENAME awk浏览的文件名 FNR 浏览文件的记录数 FS 设置输入域分隔符,等价于命令行 -F选项 NF 浏览记录的域的个数 NR 已读的记录数 OFS 输出域分隔符 ORS 输出记录分隔符 RS 控制记录分隔符 此外,$0变量是指整条记录.$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推. 统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行

awk调用外部变量

一.用awk 有以下几种方法去调用变量:1.  awk '{print a, b}' a=111 b=222 yourfile注意, 变量位置要在 file 名之前, 否则就不能调用.还有, 于 BEGIN{}中是不能调用这些的variable. 要用之后所讲的第二种方法才可解决.2.  awk –v a=111 –v b=222 '{print a,b}' yourfile注意, 对每一个变量加一个 –v 作传递.3.  awk '{print " ' "$LOGNAME"

Shell、Awk 中自动隐式类型转换的“坑”

1.问题: 在林林总总的编程语言里,弱类型的语言着实不少,一方面这种"动态类型"用起来很方便,而另一方面则"坑"你没商量~ 常见的 SQL.Shell.Awk 都会遇到各种暗藏的"隐式类型转换",下面就列举一些 shell.awk 里的自动隐式类型转换 case,防止掉坑. 注意 shell.awk 的变量为空 字符串.变量为空 未定义.初始值的隐式转换问题: # shell 下的字典排序比较 [email protected] 10:59:23