我需要 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
以逗号分隔每一行并获取第四个值,这将为您提供一个数字列表,然后 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
库更适合于此。
关于linux - 如何使用 Grep 命令查找文本文件中的特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58760499/