例:作为传送消息 的机制之一,UNIX提供了一个向其所有用户传送消息的命令wall(意思是write to all写给所有用户),该命令允许向所有工作中的用户(终端)发送消息。为此,我们可以通过一段shell批处理程序wall.shell来模拟这一程序(事实上比较老的版本中wall就是一段shell批处理程序:
$cat wall.shell : # @(#) wall.shell:发送消息给每个已注册终端 # cat >/tmp/$$ #用户录入消息文本 who -u | awk '{print $2}' | while read tty do cat /tmp/$$>$tty done
V 变量 含义 缺省值 -------------------------------------------------------- N ARGC 命令行参数个数 G ARGIND 当前被处理文件的ARGV标志符 N ARGV 命令行参数数组 G CONVFMT 数字转换格式 %.6g P ENVIRON UNIX环境变量 N ERRNO UNIX系统错误消息 G FIELDWIDTHS 输入字段宽度的空白分隔字符串 A FILENAME 当前输入文件的名字 P FNR 当前记录数 A FS 输入字段分隔符 空格 G IGNORECASE 控制大小写敏感0(大小写敏感) A NF 当前记录中的字段个数 A NR 已经读出的记录数 A OFMT 数字的输出格式 %.6g A OFS 输出字段分隔符 空格 A ORS 输出的记录分隔符 新行 A RS 输入的记录他隔符 新行 N RSTART 被匹配函数匹配的字符串首 N RLENGTH 被匹配函数匹配的字符串长度 N SUBSEP 下标分隔符 "\034"
6.awk的内置函数
V 函数 用途或返回值 ------------------------------------------------ N gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string N index(search,string) 返回string中search串的位置 A length(string) 求串string中的字符个数 N match(string,reg) 返回常规表达式reg匹配的string中的位置 N printf(format,variable) 格式化输出,按format提供的格式输出变量variable。 N split(string,store,delim) 根据分界符delim,分解string为store的数组元素 N sprintf(format,variable) 返回一个包含基于format的格式化数据,variables是要放到串中的数据 G strftime(format,timestamp) 返回一个基于format的日期或者时间串,timestmp是systime()函数返回的时间 N sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串 A substr(string,position,len) 返回一个以position开始len个字符的子串 P totower(string) 返回string中对应的小写字符 P toupper(string) 返回string中对应的大写字符 A atan(x,y) x的余切(弧度) N cos(x) x的余弦(弧度) A exp(x) e的x幂 A int(x) x的整数部分 A log(x) x的自然对数值 N rand() 0-1之间的随机数 N sin(x) x的正弦(弧度) A sqrt(x) x的平方根 A srand(x) 初始化随机数发生器。如果忽略x,则使用system() G system() 返回自1970年1月1日以来经过的时间(按秒计算)