linux - 如何使用 Grep 命令查找文本文件中的特定值

标签 linux bash shell awk grep

我需要 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/

相关文章:

c++ - ncurses 不能与 -lncurses 一起使用

linux - 带有 Web GUI 的免费 G​​IT 服务器,如 BitBucket/GitHub

linux - 当前最新 Firefox 手动安装程序的脚本

linux - 使用 Shell 脚本自动安装 R-Studio

python - 使用带有 Python 子进程模块的 perf 来分析系统性能的稳健或准确的方法

linux - 为什么我的程序在安装在 Linux 中的 NTFS 分区上运行时,其核心转储始终为零字节?

file - Bash:逐行传递文件中的参数

linux - Condor 作业 - 将 shell 脚本作为可执行文件运行

c++ - 基于模板的shell脚本生成命令

linux - 使用 putty/ssh 并利用 grep -rn 有没有一种方法可以精确搜索