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 '{ 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脚本编程