Как я могу посчитать количество научных номеров в файле? Файл также имеет несколько строк заголовка, которые необходимо пропустить.
Часть содержимого файла приведена ниже.
FileHeaderLine1
FileHeaderLine2
FileHeaderLine3
FileHeaderLine4
2.91999996E-001 2.97030300E-001 3.02060604E-001 3.07090908E-001 3.12121212E-001 3.17151517E-001
3.22181821E-001 3.27212125E-001 3.32242429E-001 3.37272733E-001 3.42303038E-001 3.47333342E-001
3.52363646E-001 3.57393950E-001 3.62424254E-001 3.67454559E-001 3.72484863E-001 3.77515137E-001
3.82545441E-001 3.87575746E-001 3.92606050E-001 3.97636354E-001 4.02666658E-001 4.07696962E-001
4.12727267E-001 4.17757571E-001 4.22787875E-001 4.27818179E-001 4.32848483E-001 4.37878788E-001
4.42909092E-001 4.47939396E-001 4.52969700E-001
Итак, как мне пропустить первые четыре строки приведенного выше примера и посчитать количество научных чисел в файле?
looks_like_number
Использование GNU grep
Вы можете использовать
grep
для этого, используя средства PCRE. Кстати, тот же шаблон можно использовать и в Perl:Вы также можете использовать
wc -w
для подсчета слов, я считаю строки выше, ноgrep
возвращает одно совпадение на строке, так что это не имеет значения в этом сценарии.Использование Perl
Для Perl вы можете использовать этот вкладыш:
Ссылки
источник
egrep
будет работать:ОБНОВИТЬ:
если строка содержит число и некоторую другую строку, мы можем использовать ее
awk
для решения проблемы:источник
-oP
опции , указанной в ОДСЕ ответа раньше, но я исправил мою проблему с помощьюawk
@JohnnyПредполагая, что у вас есть только научные цифры после 4-й строки, вы можете сделать что-то вроде ниже.
Для ввода, который вы предоставили, вывод 33 после выполнения вышеуказанной команды.
источник
Если вам нужно просто посчитать количество полей с пробелами после строк заголовка в Perl, я думаю, вы могли бы просто сделать
Если вам действительно нужно считать только числа, отформатированные с научной точки зрения, то одним из подходов может быть поиск и замена чисел в соответствии с подходящим регулярным выражением, а затем подсчет количества замен (выражение подстановки perl возвращает число замен при привязке его к переменной )
источник
Все сводится к тому, что вы на самом деле хотите считать научным числом , что вы можете ожидать, чтобы содержать ваши входные данные, и где вы можете согласиться найти эти числа во входных данных.
Например, в:
Я могу найти 0 или 2 (inf и 2E2000) или 3 (inf, 2E200, 0) числа (или доведенные до крайности, ища все последовательности символов, которые образуют действительное число: 17 (inf, 2, 2E2, 2E20, 2E200, 2E200, 2E2000, 2, 20, 200, 2000, 0, 00, 000, 0, 00, 0)).
Если вы знаете, что ваши входные данные содержат только цифры в X.XXXXXXXXE-XXX, и что они написаны на своих собственных словах, может быть безопаснее искать именно это в целых словах, таких как:
Идея заключается в том, чтобы получить одно слово в строке и сопоставить всю строку (
-x
) с шаблоном, который вы хотите. Чтобы разрешить любой научный номер записи (-1.2e + 1234 ... до тех пор, пока естьe
или илиE
), вы можете изменить шаблон на:Или сделайте
e...
часть необязательной, чтобы разрешить все виды десятичных чисел с плавающей запятой:Это все дает один и тот же ответ для вашего конкретного ввода, но где это будет иметь значение, это где ввод, который отличается от строгого шаблона, показанного в вашем примере.
источник