您的位置:首页 > 运维架构 > Shell

BASH Shell小结 整理中

2013-08-12 14:07 281 查看
awk语法格式
awk-fawk.shfile#执行脚本awk.sh
./awk.shfile#执行脚本awk.sh,脚本以#!/bin/awk开头
awk'{}'file#awk命令行模式,嵌入shell脚本中

awkBEGIN{action}'/pattern/{action}'END{action}file#awk语法格式
awk'/^North/'file#打印以North开头的行(无操作语句)
awk'{print$0}'#批印所有行(无模式语句)
awk'/^North/{print$0}'file#打印以North开头的行
awk'/^North/,/^West/{print$0}'file#打印以North至West开头之间的行
awk'{print$1,$2,$3}'file#打印域1域2域3,以空格分开
awk'{print$1$2$3}'file#打印域1域2域3,不以空格分开
其中//为模式,{}为动作。awk仅针对匹配的行执行动作(没有模式代表所有行),行匹配后执行{}中的动作(没有动作默认打印到输出)

awk记录、字段
行称作记录,默认以回车符(换行符)作为记录分隔符
域称作字段,默认以空格、制表符作为域分隔符
$0整行
$1域1
$2域2
RS输入记录分隔符
ORS输出记录分隔符
FS输入字段分隔符
OFS输出字段分隔符
NR记录号
NF字段数
awk-F:#指定域分隔符为:
awk-F[:\t]#指定域分隔符为空格或:或制表符

awk正则表达式
^行首
$行尾
.单个任意字符
*0或多个前导字符
+1或多个前导字符
?0或1个前导字符
(ab)+1或多个前导字符串
[abc]a或b或c
[^abc]不是a或b或c
a|ba或b
\*转义,代表*本身
&替代串,代表查找串中匹配到的内容

~模式匹配操作符
!~模式否定匹配操作符
awk的正则表达式,主要用于模式中,用于筛选记录,示例如下:
northwestNWJoelCraig3.0.9834
westernWESharonKelly5.3.97523
southwestSWChrisFoster2.7.8218
southernSOMayChin5.1.95415
southeastSEDerekJohnson4.0.7417
easternEASusanBeal4.4.84520
northeastNETJNichols5.1.94313
northNOValShultz4.5.8959
centralCTSheriWatson5.7.94513
awk'/^n/{print$0}'#打印n开头的行
awk'$2~/^N/{print$0}'#打印域2以N开头的行,~为模式匹配操作符,!~取反

printf函数
printf修饰符
-左对齐
#8进制前面加0,16进制前面加0x
printf格式说明符
%d10进制数
%f浮点数
%s字符
printf转义符
c字符
s字符串
d10进制数
f浮点数
x16进制数
echo"UNIX"|awk'{printf"%-15s\n",$1}'
#%让printf作准备,-左对齐占,15占位15,s字符,\n换行符;整个格式说明用””,格式说明与被格式字符串或域用,
awk'{printf"Thenameis:%-15sIDis%8d\n",$1,$2}'
#%-15s格式化$1,%8d\n格式化$2

awk字符串函数
sub(正则,替换串,目标串)#$0或省略,默认仅执行记录中第1次匹配,全匹配用gsub
awk'{sub(/Mac/,"Macbook",$1);print}'
index(字符串,子串)#子串在字符串中出现的位置
awk'{index($1,"Mac")}'
substr(字符串,起始位置,子串长度)#从字符串的指定长度开始截,如截到末尾,字串长度省略。
awk'{printsubstr($1,3,5)}'

awkif语句
awk'/pattern/{
if(expr)#表达式用(),如果为真(非0或非空),执行语句1
语句1#1条语句
elseif(expr)
{语句1;语句2}#2条语句,用{}括起来,语句之间用;
else
{语句1#2条语句,用{}括起来,语句之间用;或回车
语句2}
}'
awk循环语句
awk'{i=1;while(i<=NF){printNF,$i;i++}}'
awk'{for(i=1;i<=NF;i++)printNF,$i}'
i=1初始化变量
(i<=NF)测试变量i
i++重新赋值i
printNF,$i执行动作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SHELL AWK