Пробовал с помощью приведенной ниже команды, все работает нормально
команда
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
Функция 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
Использование 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
совпадений и добавьте в качестве нового столбца в конец каждой строки.