Как я могу подсчитать количество определенных символов в столбце для каждой строки и добавить в качестве нового столбца с помощью AWK?

Пробовал с помощью приведенной ниже команды, все работает нормально

команда

awk -F ":" '{print $3,$NF}' p.txt| sed 's/"\}*//g'| sed "s/,NAME/|/g"| sed -r "s/\s+//g"| sed '1i table|NAME'

выход

table|NAME
ABC|A

ABC|A

ABC|B

ABC|A

ABC|B
2
22.09.2021, 19:20
2 ответа

Функция gsub()возвращает количество сделанных замен. Вы можете использовать этот факт для подсчета количества символов Nво втором поле и добавления этого числа в качестве нового поля в каждой строке :

.
$ awk -F '\t' '{ $3 = gsub("N","N",$2) }; 1' file
sample1 TCTNG 1
sample2 CCNGGGGGTN 2
sample3 GGGNNNTC 3

Вывод вызван завершающим1(эквивалентом использования { print }или{ print $0 }).

Задайте значение специальной переменной OFSдля использования другого разделителя полей, отличного от стандартного (пробела )в выходных данных. Здесь я использую любой разделитель поля ввода, установленный на:

$ awk -F '\t' 'BEGIN { OFS=FS } { $3 = gsub("N","N",$2) }; 1' file
sample1 TCTNG   1
sample2 CCNGGGGGTN      2
sample3 GGGNNNTC        3

Аналогично в Perl, но с использованием оператора trвместоgsub():

$ perl -MEnglish -a -F '\t' -e 'BEGIN { $OFS="\t"; $ORS="\n" } print @F, ($F[1] =~ tr/N/N/)' file
sample1 TCTNG   1
sample2 CCNGGGGGTN      2
sample3 GGGNNNTC        3
7
22.09.2021, 19:40

Использование Raku (, ранее известного как Perl _6)

raku -ne 'put ~$/.join("").chars if m:g/N*/;'  

Пример ввода:

sample0 TCTG
sample1 TCTNG
sample2 CCNGGGGGTN
sample3 GGGNNNTC

Пример вывода:

sample0 TCTG    0
sample1 TCTNG   1
sample2 CCNGGGGGTN  2
sample3 GGGNNNTC    3

Над кодом :сначала напечатайте переменную темы Raku $_(, а затем \t), затем напечатайте количествоjoin("")-конкатенированных Nсовпадений и добавьте в качестве нового столбца в конец каждой строки.

https://raku.org

2
23.09.2021, 08:12

Теги

Похожие вопросы