我的输入文件:
20110512075900
20110512075915
20110512075930
20110512075945
20110512075900
20110512080015
20110512075930
20110512080000
20110512075915
20110512075945
20110512075900
20110512075930
20110512075900
20110512075915
我想计算从'... 00'(最后两个字符)到下一个'... 00'的行数。 所以,我的输出将是:
4
3
3
2
2
我尝试使用sed:
nrlinii=`sed -n '/^[0-9]00/,/^[0-9]45/ p' file.txt | wc -l `
echo $nrlinii
但是不要工作。
非常感谢你。
答案 0 :(得分:3)
使用awk
:
$ awk '{a++} /00$/ {print a; a=0} END{print a}' file
8
3
2
1
{a++}
会递增计数器a
。/00$/ {print a; a=0}
如果该行以00
结尾($
表示行尾),则打印该值并重置计数器。END{print a}
从最后00
打印计数器直至结束。答案 1 :(得分:2)
仅使用bash:
$ i=0; while read; do [[ $i -ne 0 ]] && [[ $REPLY =~ 00\ *$ ]] && { echo $i; i=0; }; let i=$i+1; done < test.txt ; echo $i
4
3
3
2
2
但我发布此解决方案只是为了好玩,我更喜欢使用awk
作为fedorqui的答案。
答案 2 :(得分:2)
这可能适合你(gnu SED&amp; Shell):
sed '1{h;d};/00\s*$/!{H;$!d};x;s/.*/echo "&" | wc -l/ep;d' file
收集保留空间中的线组。然后针对他们运行wc -l
。
答案 3 :(得分:1)
试试这行:
awk -v RS='[0-9]*00\n' '$0=NF+1' file
答案 4 :(得分:0)
$ awk '/00[[:space:]]*$/{ if (NR>1) print NR - prev; prev=NR}' file
4
3
3
2
答案 5 :(得分:0)
对我来说,使用哈希是一种自然的方式来计算项目。
$ awk '{
array[substr($1, 13, 2)]++
} END {
for (num in array) {
print num, array[num]
}
}' input.txt
45 2
00 5
30 3
15 4