【发布时间】:2019-11-08 04:43:29
【问题描述】:
我需要 grep 一个名为 daily_fails_count.csv 的文件,但只能找到失败的次数。 在那个文件里面是这个,在一个较短的范围内:
January,1,0,0
January,1,1,0
January,1,2,0
January,1,3,0
January,1,4,0
January,1,5,0
January,1,6,0
January,1,7,0
January,1,8,0
它的格式是“月、日、小时、故障”。它贯穿所有月份。最后一个值是当时发现的故障数。我知道这里都说 0 但那是因为那里没有发现失败,其他日期都有失败。
我不太擅长 Linux 脚本中的 grep 命令,所以我的问题是,如何通过 grep 查找文件中的最后一个数字?
我正在将这个脚本写在一个名为 make_accum_fail_counts.sh 的文件中,我会这样运行它:
bash make_accum_fail_counts.sh daily_fail_counts.csv > accum_fail_counts.csv
所以我使用 daily_fail_counts.csv 作为新脚本的输入。到目前为止,这是我的脚本:
#!/bin/bash
if [ $# == 1 ]
then
logFile=$1
fi
cat $logFile > tmpFile
hour=0
failure=0
while [ $hour -le 23 ]
do
if [ $hour -le 23 ]
then
failure=`grep "*,*,*,^[0-10]" tmpFile | wc -l`
fi
echo "$hour,$failure"
hour=$((hour+1))
failure=0
done
rm -rf tmpFile
我只需要 grep 命令的帮助:
failure=`grep "*,*,*,^[0-10]" tmpFile | wc -l`
只是为了在所有的日子中发现一个小时又一个小时的失败。所以它的输出是:
0,1000
1,1040
2,2888
0:00-1:00 之间有 1000 次失败,1:00-2:00 之间有 1040 次失败等等。提前致谢。
【问题讨论】:
-
如果最后一个数字后面没有空格,
grep -ohE '[[:digit:]]$' YOURFILE可以。然而,最后一个数字告诉你什么?如果错误数为10,则最后一位为0,与没有错误相同。如果所有行都具有完全相同的结构,cut -d ',' -f 4 YOURFILE将只为您提供每行的最后一个数字,这可能会更有用。或者你使用 grep 模式[[:digit:]]+$,它也返回最后一个数字。