Привет у меня есть файл, который похож на это:
ZC12A_MOUSE Mus musculus Q5D1E7 PDB; 2N5J; NMR; -; A=45-89.
PDB; 2N5K; NMR; -; A=299-327.
PDB; 2N5L; NMR; -; A=544-596.
PDB; 5H9V; X-ray; 2.75 A; A/B/C/D=134-339.
PDB; 5H9W; X-ray; 2.60 A; A/B=134-339.
ZHX1_HUMAN Homo sapiens Q9UKY1 PDB; 2ECB; NMR; -; A=565-640.
PDB; 2GHF; NMR; -; A=60-153.
PDB; 2LY9; NMR; -; A=462-532.
PDB; 3NAR; X-ray; 2.60 A; A/B=655-731.
ZHX2_HUMAN Homo sapiens Q9Y6X8 PDB; 2DMP; NMR; -; A=524-599.
PDB; 3NAU; X-ray; 2.70 A; A/B=444-501.
Я пытаюсь считать "блоки" в файле (здесь, я имею 3). Таким образом, я могу сделать это, но подсчет количества раз, кажется, что в первом столбце существует некоторая буква/число? Есть ли некоторый удар, управляют, чтобы я мог использовать?
Легко захватить строки, которые не запускаются с пробелов с чем-то как awk
:
$ awk '/^\S/' test
ZC12A_MOUSE Mus musculus Q5D1E7 PDB; 2N5J; NMR; -; A=45-89.
ZHX1_HUMAN Homo sapiens Q9UKY1 PDB; 2ECB; NMR; -; A=565-640.
ZHX2_HUMAN Homo sapiens Q9Y6X8 PDB; 2DMP; NMR; -; A=524-599.
Если Вы просто хотите считать это, можно передать это по каналу в wc -l
который считает строки от входа:
$ awk '/^\S/' test | wc -l
3
Можно также сделать более усовершенствованные вещи с awk — который является, почему я выбрал его — как выделение первого поля от строк без ведущего пробела:
$ awk '/^\S/ {print $1}' test
ZC12A_MOUSE
ZHX1_HUMAN
ZHX2_HUMAN
И оттуда можно считать уникальные экземпляры каждого из тех. Единственное условие для этого - Вы, должен отсортировать его сначала. К счастью существуют инструменты для всего этого материала в основной установке:
$ awk '/^\S/ {print $1}' test | sort | uniq -c
1 ZC12A_MOUSE
1 ZHX1_HUMAN
1 ZHX2_HUMAN
Можно использовать grep
:
grep -c '^[[:alnum:]]' input-file
^
запуск строки, [[:alnum:]]
алфавиты соответствий или числа (короткий для алфавитно-цифрового), и -c
делает grep
распечатайте количество.
Если Вы работаете с файлами, которые состоят из многострочных записей, то необходимо ознакомиться с режимом абзаца awk, который достигается путем установки пустого разделителя записей RS
.
Так, например, для печати количества записей (блоки) в файле можно просто сбросить RS
и затем распечатайте количество записей, обработанных в конце:
awk -vRS= 'END {print NR}' file
Если Вы хотите распечатать первое поле каждой многострочной записи, это просто
$ awk -vRS= '{print $1}' file
ZC12A_MOUSE
ZHX1_HUMAN
ZHX2_HUMAN
и так далее - не имея необходимость обращаться к соответствию регулярного выражения.