У меня есть файл, который имеет три столбца. Столбец 3 содержит названия генов, и это выглядит так:
Rv0729,Rv0993,Rv1408
Rv0162c,Rv0761c,Rv1862,Rv3086
Rv2790c
Как я могу напечатать количество генов в каждом ряду?
text-processing
Saisha
источник
источник
Rv*
шаблону в любом месте строки, а не только в определенном столбце. Поэтому я просто отмечу, что если у вас на самом деле есть другие данные в файле, не представленные в этом вопросе, возможно, вам придется соответствующим образом изменить решения. (ИлиОтветы:
Вы просто хотите добавить столбец с количеством столбцов в нем. Это может быть сделано с помощью
awk
:NF
этоawk
переменная , содержащая количество полей (столбцов) в текущей записи (строки). Мы печатаем это число, за которым следуют запятая и остальная часть строки для каждой строки.Альтернатива (тот же результат, но может выглядеть немного чище):
FS
это разделитель полей, которыйawk
используется для разделения каждой записи на поля, и мы устанавливаем это в запятую-F ','
в командной строке (как в первом решении).OFS
является разделителем выходного поля, и мы устанавливаем его таким же, как иFS
до чтения первой строки ввода.источник
Если вы хотите посчитать количество вхождений
Rv[0-9]{4}c?
шаблона, а не количество полей, разделенных запятыми, как предполагает тема вашего вопроса, вы можете сделать следующее:источник
Подход Perl:
В
-a
маркеperl
ведет себя , какawk
и разделить каждую строку ввода на строке , заданной-F
и сохранение полученных полей в массив@F
. Следовательно,$#F
будет самый высокий индекс массива@F
и, поскольку массивы начинают отсчитываться с0
,$#F+1
будет общим количеством элементов в массиве. В-p
означает «печать каждую строку ввода после того, как aplpying сценарий , данное-e
.s///
Оператор замещения и здесь были заменяют начало линии (^
) с количеством полей + 1 и запятой ($#F+1 . ","
).источник
Ваш вопрос утверждает, что столбец 3 содержит названия генов. Я предполагаю, что ваш фактический вклад выглядит следующим образом:
Каждое имя гена в column3 содержит ведущую
Rv
подстроку. Таким образом, мы можем считать их в Python так:Результирующий список показывает количество генов в каждой строке в соответствующем порядке. Если мы хотим сделать его более подробным и включить возможность того, что гены могут не содержать строку «Rv» (но придерживаться предположения, что column3 - это строка значений, разделенных запятыми), мы также можем сделать следующее:
Тестовый забег:
источник