awk как вывести последнее значение счетчика?

#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)