#awk
Вопрос:
У меня есть файл с некоторыми строками, начинающимися с >
Я хочу подсчитать количество таких строк в файле.
awk '{if(/>/){count = 1}{print count}}' file.text
1
1
2
2
Очевидно, что здесь мне просто нужно последнее «2». В принципе, я хочу, чтобы awk напечатал последнее значение count. Мне кажется, что это должно быть легко сделать, но я не могу найти, как это сделать.
Я знаю, что есть решения, такие как grep-c, которые справились бы с этой задачей, но мне любопытно иметь версию awk.
Спасибо
РЕДАКТИРОВАТЬ: Я пробовал это
awk '{if(/>/){count = 1}END{print count}}' Scaffold_1_8558356-8558657.fa_transcripts.combined.filtered.fas
awk: cmd. line:1: {if(/>/){count = 1}END{print count}}
awk: cmd. line:1: ^ syntax error
Ответ №1:
С вашим проверенным кодом попробуйте выполнить его один раз.
awk '{if(/>/){count = 1}} END{print count 0}' file.text
ИЛИ вы могли бы сократить выше до:
awk '/>/{count } END{print count 0}' file.text
Комментарии:
1. Здравствуйте, да, я сделал это, извините, что я должен был упомянуть об этом, я редактирую исходный вопрос.
2. @Axzd, попробуйте вот это, это должно сработать, вы не закрыли его должным образом.
3. Ааааа да, я видел, что неправильно использовал»}», так круто, что так быстро получил ответ, большое спасибо.
Ответ №2:
Будьте осторожны, вы хотите
У меня есть файл с некоторыми строками, начинающимися с > Я хочу подсчитать количество таких строк в файле.
но вы просите AWK проверить
if(/>/)
…
что будет справедливо для >
любого места в строке, например, если file.txt
содержимое:
abc > def
ghi > jkl
mno > prs
затем
awk '{if(/>/){print $0}}' file.txt
выход
abc > def
ghi > jkl
mno > prs
Вы можете ограничить обнаружение только в начале строки, используя ^
, например, использование '{if(/^>/){print $0}}'
для печати только строк, которые начинаются с >
.
(проверено в gawk 4.2.1)