我需要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次失败,依此类推。提前致谢。
最佳答案
cat yourfile.csv | cut -d',' -f 4 | paste -s -d+ - | bc
总结所有失败。使用
cut -d',' -f 4 yourfile.csv
分割逗号上的每一行并获取第4个值,这将为您提供数字列表,然后是use a shell command to sum a list of numbers。您可以grep将其过滤到小时,例如
cat yourfile.csv | cut -d',' -f 3,4 | grep ^0, | cut -d',' -f 2
要获得所有第0小时的失败计数。
for hour in {0..23}; do
cat yourfile.csv | cut -d',' -f 3,4 | grep ^$hour, | cut -d',' -f 2 | paste -s -d+ - | bc
done
获取每小时的总数。
如果希望按天对它们进行分组,则可以阅读有关
date
命令的信息,了解如何获取它来输出诸如January,1,
之类的字符串,并在上述命令中添加一个外部for
循环,该循环将每行通过grep
传递至该date
的输出命令。就个人而言,这时我将开始编写Python而不是bash。
pandas
库更适合于此。