这是我的输入文件。
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *5555555555 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *2222222222 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *3333333333 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [BBBBB]
yyyy-mm-dd hh:mm:ss string *6666666666 [AAAAA]
让我们将上述输入视为 input.gz ,如何将最后一列的* 9999999999计数为[AAAAAA]
我需要一个使用SED或AWK或GREP的脚本。
预期输出应为:
5
如果上面的输入将最后一列扩展到新行怎么办?喜欢:
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *5555555555 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA
zzzzzzzzzzzz xxxxxxxx yy]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *2222222222 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *3333333333 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [AAAAA]
yyyy-mm-dd hh:mm:ss string *9999999999 [BBBBB]
yyyy-mm-dd hh:mm:ss string *6666666666 [AAAAA]
在上述情况下,使用AWK难道不难吗?如何使用SED克服这个问题?
我很抱歉再次编辑它。如果10位数字未知怎么办?如* 9999999999未知,我们能否找出* NNNNNNNNNN最后一列发生的次数为[AAAAA]?
答案 0 :(得分:2)
cat input_file | grep '[*]9999999999 \[AAAAA\]$' | wc -l
答案 1 :(得分:1)
试试这个:
awk '$NF ~ /\[A+\]/ && $(NF1)~/\*9+/' input | wc -l
为简单起见,我使用wc
- 命令进行计数。当然,这也可以在awk中实现:
awk '$NF ~ /\[A+\]/ && $(NF1)~/\*9+/{counter++}END{print counter}' input
更新:如何列出每个号码的出现次数
awk '$NF ~ /\[A+\]/{ar[$(NF-1)]++}END{for(key in ar){print key,ar[key]}}' input
输出:
*2222222222 1
*6666666666 1
*5555555555 1
*3333333333 1
*9999999999 5
答案 2 :(得分:0)
只有一个grep:
grep -c "\*9999999999.*\[AAAAA\]$" inputfile
如果输入分为2行(有时)但[AAAAA
仍在第一行,则可以尝试
grep -c "\*9999999999.*\[AAAAA" inputfile
答案 3 :(得分:0)
awk
救援!
$ awk -v key='*9999999999' '$NF=="[AAAAA]" && $(NF-1)==key {c++} END{print c}' file
5
如果最后一个字段被分成两行,根据定义,它不会等于" [AAAAA]"