Подсчет количества 10-значных чисел в файле - PullRequest
3 голосов
/ 02 апреля 2012

Мне нужно подсчитать общее количество случаев, когда в файле появляется 10-значное число. Все числа имеют начальные нули, например ::100100

This is some text. 0000000001

Возвращает:

1

Если один и тот же номер появляется более одного раза, он снова считается, например ::1007*

0000000001 This is some text.
0000000010 This is some more text.
0000000001 This is some other text.

Возвращает:

3

Иногда между числами нет пробелов, но каждая непрерывная строка из 10 цифр должна быть подсчитана:

00000000010000000010000000000100000000010000000001

Возвращает:

5

Как определить общее количество десятизначных чисел, встречающихся в файле?

Ответы [ 4 ]

19 голосов
/ 02 апреля 2012

Попробуйте это:

grep -o '[0-9]\{10\}' inputfilename | wc -l
2 голосов
/ 02 апреля 2012

Последнее требование - вам нужно считать несколько чисел на строку - исключает grep, насколько я знаю, он может рассчитывать только на строку.

Редактировать: Очевидно, что я исправлен с помощью Нейта :) Параметр grep -o - это то, что я искал.

Однако вы можете легко сделать это с sed вот так:

$ cat mkt.sh 
sed -r -e 's/[^0-9]/./g' -e 's/[0-9]{10}/num /g' -e 's/[0-9.]//g' $1
$ for i in *.txt; do echo --- $i; cat $i; echo --- number count; ./mkt.sh $i|wc -w; done
--- 1.txt
This is some text. 0000000001

--- number count
1
--- 2.txt
0000000001 This is some text.
0000000010 This is some more text.
0000000001 This is some other text.

--- number count
3
--- 3.txt
00000000010000000010000000000100000000010000000001

--- number count
5
--- 4.txt
1 2 3 4 5 6 6 7 9 0
11 22 33 44 55 66 77 88 99 00
123456789 0

--- number count
0
--- 5.txt
1.2.3.4.123
1234567890.123-AbceCMA-5553///q/\1231231230
--- number count
2
$ 
1 голос
/ 02 апреля 2012

Это может работать для вас:

cat <<! >test.txt
0000000001 This is some text.
0000000010 This is some more text.
0000000001 This is some other text.
00000000010000000010000000000100000000010000000001
1 a 2 b 3 c 4 d 5 e 6 f 7 g 8 h 9 i 0 j
12345 67890 12 34 56 78 90
!
sed 'y/X/ /;s/[0-9]\{10\}/\nX\n/g' test.txt | sed '/X/!d' | sed '$=;d'
8
1 голос
/ 02 апреля 2012

"I need to count the total number of instances in which a 10-digit number appears within a file. All of the numbers have leading zeros"

Так что я думаю, что это может быть более точным:

$ grep -o '0[0-9]\{9\}' filename | wc -l
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...