Pages: 26/48 First page Previous page 21 22 23 24 25 26 27 28 29 30 Next page Final page [ View by Articles | List ]

awk内置变量

[不指定 2008/09/07 17:20 | by askwan ]
awk内置变量比较多,长时间不用,容易忘记和混淆,特做个小结备忘

ARGV  命令行参数的排列
ARGC  命令行参数个数
RNVIRON 系统环境变量
FILENAME  awk读入的文件名
FNR awk读入的文件的记录数
FS   指定域分割符,默认是空格,等价于 -F
NF  记录的域个数,简单说就是每读入一行的域的个数
NR  已经读入的记录数,简单的说,其值就是awk读到第几行值就是几
OFS 输出域分隔符
ORS 输出记录分隔符,默认的输出记录分隔符是 换行符\n
RS   控制输入记录分隔符,默认的输入记录分隔符是换行符\n


用的比较多的是后面六个 FS,NF,NR,OFS,ORS和RS
下面用个简单的例子来阐述


[root@localhost awk]# cat test
askwan11:askwan12:askwan13:askwan14
askwan21:askwan22:askwan23:askwan24
askwan31:askwan32:askwan33:askwan34
askwan41:askwan42:Askwan43:askwan44


a.指定域分隔符FS为“:”,打印前三列的内容

[root@localhost awk]# awk 'BEGIN {FS=":"}{print $1,$2,$3}' test
askwan11 askwan12 askwan13
askwan21 askwan22 askwan23
askwan31 askwan32 askwan33
askwan41 askwan42 Askwan43


b.指定域分隔符FS为“:”,并指定输出域分隔符OFS为”==“,打印前三列内容

[root@localhost awk]# awk 'BEGIN {FS=":";OFS="=="}{print $1,$2,$3}' test
askwan11==askwan12==askwan13
askwan21==askwan22==askwan23
askwan31==askwan32==askwan33
askwan41==askwan42==Askwan43



c.指定域分隔符FS为“:”,并指定输出域分隔符OFS为”==“,同时指定输出记录域ORS为”*“,打印前三列内容

[root@localhost awk]# awk 'BEGIN {FS=":";OFS="==";ORS="*"}{print $1,$2,$3}' test  
askwan11==askwan12==askwan13*askwan21==askwan22==askwan23*askwan31==askwan32==askwan33*askwan41==askwan42==Askwan43*


d.指定域分隔符FS为“:”,打印记录域个数NF和已经读入的记录域数NR


[root@localhost awk]# awk 'BEGIN {FS=":"}{print NF,NR}' test
4 1
4 2
4 3
4 4


--END--
Tags: ,

常用shell脚本参数含义

[不指定 2008/09/03 17:58 | by askwan ]
为了写出友好和易于使用的脚本,这里总结了一下,目前大部分脚本程序最经常使用的参数
,和“国际”接轨,以后要慢慢培养自己这方面的能力

-a   显示所有对象
-c   设置一个具体数值
-d   指定一个目录
-D   debug模式运行
-e   扩展一个对象
-f    指定一个从中读取数据的文件
-h   限制脚本帮助信息
-i    忽略大小写
-l    产生一个长格式化输出
-n  非交互式模式
-o  指定输出文件
-q  安静模式运行
-r  递归式处理文件和目录
-s  静默模式运行
-v  打印版本信息
-y  默认yes回答所有过程

能想到的就这些 欢迎补充
Tags: ,

$*与$@的差别

[不指定 2008/09/03 17:28 | by askwan ]
在bash中,$* 与 $@ 都表示shell所有的参数值,

实例一:
test1


[root@localhost askwan]# ./test1 askwan askwan1 askwan2 askwan3

when use the $* : askwan askwan1 askwan2 askwan3
when use the $@ : askwan askwan1 askwan2 askwan3


再看示例2:
test2




[root@localhost askwan]# ./test2 askwan1 askwan2 askwan3 askwan4

$* parameter #1 = askwan askwan1 askwan2 askwan3
$@ parameter #1 = askwan
$@ parameter #2 = askwan1
$@ parameter #3 = askwan2
$@ parameter #4 = askwan3


从这点知道,其实$*和$@最大的区别就是,前者把脚本所有参数都当作一个整体的字符串,后者则以空格符区别对待各个参数。
Tags: ,

$# 与 ${!#}

[不指定 2008/09/03 17:02 | by askwan ]
$#和${!#}细微区别
示例:


[root@localhost askwan]# chmod a+x test
[root@localhost askwan]# ./test 1 2 3 4 5

the last parametes is 5 .
the last parametes is 5 .

[root@localhost askwan]# ./test

the last parametes is 0 .
the last parametes is ./test .


在有参数情况下,两者都表示最后一个参数的值;
在参数为零时,前者即$#显示零,而${!#}的值表示shell脚本名称。
Tags: ,
Pages: 26/48 First page Previous page 21 22 23 24 25 26 27 28 29 30 Next page Final page [ View by Articles | List ]