shell中awk脚本编写碰到的问题

2025-05-08 16:26:11
推荐回答(3个)
回答1:

写一个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

回答2:

想用awk写是把
awk '{a[$1]++}END{for(i in a)print i,a[i]/2}' logfile|grep 20091114

大概就是这个意思,没有实际操作可能有错误
另外〔头没有删掉,另外也不能判断失败,就是单日发送了多少次而已 需要你在修改一下

回答3:

根据你的要求,如是,也不必用awk

nc10@your-5554c55be4 ~
$ cat data
[20091114 08:30:49] get 1 record! #63374
[20091114 08:30:58] 发送成功 : 63374
[20091114 09:49:55] get 1 record! #63378
[20091114 09:50:03] 发送成功 : 63378
[20091115 08:30:49] get 1 record! #63374
[20091115 08:30:58] 发送成功 : 63374
[20091116 09:49:55] get 1 record! #63378
[20091116 09:50:03] 发送成功 : 63378
[20091117 08:30:49] get 1 record! #63374
[20091117 08:30:58] 发送成功 : 63374
[20091117 09:49:55] get 1 record! #63378
[20091117 09:50:03] 发送成功 : 63378
[20091117 08:30:49] get 1 record! #63374
[20091117 08:30:58] 发送成功 : 63374
[20091118 09:49:55] get 1 record! #63378
[20091118 09:50:03] 发送成功 : 63378

nc10@your-5554c55be4 ~
$ cat a
#! /bin/bash
file="data" # adjust the filename fit your need
for i
do
wanted=$(grep "$i" "$file")
success=$(echo "$wanted" | grep '发送成功' | wc -l)
echo -e "$i\t\t发送成功: $success"
done

nc10@your-5554c55be4 ~
$ ./a 20091114 20091117
20091114 发送成功: 2
20091117 发送成功: 3

nc10@your-5554c55be4 ~
$

学shell脚本不必拘泥於某一样工具,完成任务就可