计算文件中的模式后面的行

时间:2017-02-01 06:50:36

标签: shell unix grep

例如,我有一个文件test.json,其中包含一系列包含以下内容的行:

  • header{...}
  • body{...}
  • 其他文字(与他人一样)
  • 空行

我想运行一个返回以下内容的脚本

Counted started on : test.json
- headers : 4
- body : 5
- <others>
Counted finished : <time elapsed>

到目前为止我得到的是这个。

count_file() {
    echo "Counted started on : $1"
    #TODO loop
    cat $1 | grep header | wc -l
    cat $1 | grep body | wc -l
    #others
    echo "Counted finished : " #TODO timeElapsed
}

编辑:

修改问题并添加了代码段

2 个答案:

答案 0 :(得分:0)

Perl on Command Line

perl -E '$match=$ARGV[1];open(Input, "<", $ARGV[0]);while(<Input>){ ++$n if /$match/g } say $match," ",$n;' your-file your-pattern

对我来说
perl -E '$match=$ARGV[1];open(Input, "<", $ARGV[0]);while(<Input>){ ++$n if /$match/g } say $match," ",$n;' parsing_command_line.pl my

在我的脚本中 parsing_command_line.pl

计算模式 my 的数量

<强>输出

my 3

为你
perl -E '$match=$ARGV[1];open(Input, "<", $ARGV[0]);while(<Input>){ ++$n if /$match/g } say $match," ",$n;' test.json headers

注意
在命令提示符上写下一行中的所有代码 第一个参数是您的文件
第二是你的模式
这不是一个完整的代码,因为您必须逐个输入所有模式

答案 1 :(得分:0)

您可以在变量中捕获命令的结果,例如:

result=`cat $1 | grep header | wc -l`

然后打印结果:

echo "# headers : $b"

`是 eval 运算符,它允许通过命令输出替换整个表达式。