awk的使用(2)

14.进行文本域的修改
awk '{ if($1=="J.Troll") ($1="Jack.Troll"); print $1}' grade.txt
会显示所有的记录

awk '{ if($1=="J.Troll") {$1="Jack.Troll"; print $1}}' grade.txt
只会显示修改后的记录

创建新的输出域:
awk 'BEGIN{ print "Name\tDiff"}{if($6<$7){$8=$7-$6; print $1,$8}}' grade.txt

15.文件长度相加在目录中查看文件时,如果想快速查看所有文件的长度及其总和,但要排除子目录,使用ls -l命令,然后管道输出到 awk,awk首先剔除首字符为 d(使用正则表达式)的记录,然后将文件长度列相加,并输出每一文件长度及在 END部分输出所有文件的长度。
所有文件以及大小  排除文件夹的
ls -l|awk '/^[^d]/ {print $9"\t"$5}{tot+=$5}END{ print "total KB: "tot}'


16.awk的一些内置函数
gsub(r,s)            在整个$0中用s替代r
gsub(r,s,t)            在整个t中用s替代r
index(s,t)            返回s中字符串t的第一位置
length(s)            返回s长度
match(s,r)            测试s是否包含匹配 r的字符串
split(s,a,fs)            在fs上将s分成序列a
sprint(fmt,exp)            返回经fmt格式化后的 exp
sub(r,s)            用$0中最左边最长的子串代替 s
substr(s,p)            返回字符串 s中从p开始的后缀部分
substr(s,p,n)            返回字符串 s中从p开始长度为 n的后缀部分

举例:
gsub
awk 'gsub(/4842/, 4899){ print $0}' grade.txt

index
awk 'BEGIN{print index("Hello jack","ck")}'

length
awk 'BEGIN{print "The length is: " length("Hello")}'

match
awk 'BEGIN{print match("HEllo jack", /ck/)}'
返回9
awk 'BEGIN{ print match("Hello jack", /sb/)}'
返回0
awk '$1="huhdufhaw"{print match($1, "d")}'
awk '$1=="J.Lulu" {print match($1, "l")}' grade.txt

split
awk 'BEGIN{ print split("123-45-345-87-09",arr,"-")}'
进行数据的分割 数据分段存放在arr中


substr
awk '$1=="L.Tansley" {print substr($1,1,5)}' grade.txt
从名字开始截取5个字符

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


17.从shell向awk中传递字符
echo "Stand-by" | awk '{ print length($0)}'
输出长度


string="This is a test from jack"
echo $string | awk '{ print substr($string, 1, 5)}'
输出字串



18.字符串屏蔽序列
使用字符串或正则表达式时,有时需要在输出中加入一新行或查询一元字符。
打印一新行时,(新行为字符 \ n),给出其屏蔽序列,以不失其特殊含义,用法为在字符串前加入反斜线。例如使用 \n强迫打印一新行。
如果使用正则表达式,查询花括号({}),在字符前加反斜线,如/\{/,将在awk中失掉其
特殊含义。
\b        退格键
\f        走纸换页
\n        新行
\r        回车键
\t        tab键
\ddd        八进制值
\c        任意其他特殊字符,例如 \\为反斜线符号


19.awk输出函数printf
目前为止,所有例子的输出都是直接到屏幕,除了tab键以外没有任何格式。awk提供函数printf,拥有几种不同的格式化输出功能。例如按列输出、左对齐或右对齐方式。
每一种printf函数(格式控制字符)都以一个 %符号开始,以一个决定转换的字符结束。
转换包含三种修饰符。printf函数基本语法是 printf([格式控制符 ],参数)
,格式控制字符通常在引号里。

%c        ASCII字符
%d        整数
%e        浮点数,科学记数法
%f        浮点数,例如( 123.44)
%g        awk决定使用哪种浮点数转换 e或者f
%o        八进制数
%s        字符串
%x        十六进制数

 echo "65" | awk '{printf("%c\n",$0) }'

awk '{ printf("%-15s %s\n", $1, $3)}' grade.txt
格式化输出 比较简单


20.向一行awk命令传值
在awk执行前将值传入 awk变量,需要将变量放在命令行中,格式如下:
awk 命令变量 =输入文件值

awk '{ if($5 < AGE) print $0}' AGE=10 grade.txt

21.最后将以个操作数组的例子

awk 'BEGIN{record="123-54-76-98"; split(record, arr, "-")}END{for(i in arr){print arr[i]}}' /dev/null



awk的简单介绍就到这里(以后有内容在做续)

参考书籍:shell脚本编程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值