我正在尝试编写一个非常小的程序来检查大文本文件中的子字符串数量。它所要做的就是计算文本文件的前2000行,查找任何“TTT”子字符串,对它们进行计数,并将变量设置为该总计。我对shell有点新意,所以任何帮助都会非常感激!
#!/bin/bash
$counter=(head -2000 [file name] | grep TTT | grep -o TTT | wc -l)
echo $counter
答案 0 :(得分:0)
对于它的价值,awk
更适合这项任务:
awk -F"ttt" '{j=(NF-1)+j}END{print j}' filename
这将通过分隔符“ttt”拆分文件中的每条记录。然后它计算字段数,减去一个字段,然后将其添加到总数中。
像:
这样的文件ttt tttttt something
1 5 ttt
tt
one more ttt record
将分割(使用管道分隔进行可视化),如:
| || something
1 5 |
tt
one more | record
计算每条记录的字段数:
4
2
1
2
从中减去一个:
3
1
0
1
总计为5,即存在多少“ttt”子串。
将此功能合并到您的脚本中(并修复您的其他问题):
#!/bin/bash
counter=$(awk -F"ttt" '{j=(NF-1)+j}END{print j}' filename)
echo $counter
这里的变化是,当我们在Bash中设置变量时,我们不会在前面包含$符号。仅在引用变量时才包含$
。
答案 1 :(得分:0)
你有一些小的语法错误,可能你的意思是:
counter=$(head -2000 [file name] | grep TTT | grep -o TTT | wc -l)
echo $counter
请注意我在那里做出的微小改动,以使其发挥作用。
顺便说一下,中间的grep TTT
是多余的,你可以简单地删除它,即:
counter=$(head -2000 [file name] | grep -o TTT | wc -l)
答案 2 :(得分:0)
grep已经可以做你想做的事了:counter=$(grep -c TTT $infile)
。您可以使用-m NUM, --max-count=NUM
限制匹配(而不是行)的数量,这会使grep在文件末尾停止或在找到NUM
次时停止。