shell脚本的awk
A. linux shell中awk的用法
这个。。。太多了。如果在这里就能说清楚,那么其本身功能的强大性就值得质疑。
只能推荐一些电子书(网上都可以找到)和学习链接给你:
Unix awk使用手册(第二版).doc
Awk - An Introction and Tutorial.doc
详解着名的awk_oneliner.pdf
通用线程: awk 实例:
https://www.ibm.com/developerworks/cn/linux/shell/awk/awk-1/
B. Shell中的awk
楼上的回答很正确!
awk处理文件分记录(行)和域(列),$1指第一列,$2指第二列,依次类推。
NR指文件的记录个数即行数。
这应该更明白了吧!
C. shell中awk脚本编写碰到的问题
写一个sh文件吧(命名为count.sh)
代码如下:
cnt=`cat $1 |awk '{if(sunstr($1,2,8)=='$2')print $0;}'|wc -l`
保存运行,需要输入两个参数:日志文件名和日期,记得修改脚本权限(chmod +x count.sh)
如果需要增加容错性,可在代码开头增加以下判断
if [ -z "$1" ];then
echo "请输入日志名"
exit 0;
fi
if [ -z "$2" ];then
echo "请输入要判断的日期"
exit 0;
fi
if [ `echo $2|awk '{printf("%d",length($1));}'` -ne 8 ];then
echo "请输入正确的日期"$2
exit 0;
fi
D. 用awk时怎么用-v把shell脚本的命令行参数全部传给awk
$ awk -v var1=hello -v var2=world 'BEGIN{print var1,var2}'
E. awk中使用$0与shell脚本$1有冲突怎么办
用单引号将awk命令括起来,不要用双引号,在shell中单引号中$不会被解释成变量,因此在awk脚本单引号中$n就表示awk变量,不会被shell处理
F. awk命令可以执行,在SHELL脚本不能执行。
sh -x yourshell
可以查看执行过程
# sh -x 1
++ cut -d . -f1
++ awk '{pringf $(NF-2)}'
++ uptime
+ a=
+ echo
这里pringf写错了应该是printf
[root@iZ259r7h4pfZ ~]# cat 1
a=`uptime|awk '{printf $(NF-2)}' |cut -d . -f1`
echo $a
[root@iZ259r7h4pfZ ~]# sh -x 1
++ cut -d . -f1
++ awk '{printf $(NF-2)}'
++ uptime
+ a=0
+ echo 0
0
G. shell脚本中的awk疑问
前部分的”{(total += $6)}“是个算法表达式,不会打印任何信息,其意义为每新处理一行数据都会将该行第6个字段的数据与total变量相加,所以最后total只会是一个确定值。
后半部分”END{print total}“才会打印total这个确定的值。
H. shell 脚本中 awk 无效
sh -x youshell
你看看过程就知道了
ssh 192.168.1.2 "netstat -r|grep default|awk '{print $2}'"
这个$2是需要转义的
ssh 192.168.1.2 "netstat -r|grep default|awk '{print \$2}'"
这样就可以了
放到脚本里,需要多次转义\\\$2,具体看测试过程吧
I. 【Shell脚本】awk中如何使用shell的环境变量
这种写法大家无需改变用'括起awk程序的习惯,是老外常用的写法.如: var="test"awk 'BEGIN{print "'$var'"}' 这种写法其实际是双括号变为单括号的常量,传递给了awk. 如果var中含空格,为了shell不把空格作为分格符,便应该如下使用: var="this is a test"awk 'BEGIN{print "'"$var"'"}' 二:'"$var"' 这种写法与上一种类似.如果变量含空格,则变为'""$var""'较为可靠. 三.把括起awk程序的''变为"",使用"$var"