Это часть файла
N W N N N N N N N N N
N C N N N N N N N N N
N A N N N N N N N N N
N N N N N N N N N N N
N G N N N N N N N N N
N C N N N C N N N N N
N C C N N N N N N N N
В каждой строке я хочу подсчитать общее количество всех символов, которые не являются "N"
вывод моего желания
1
1
1
0
1
2
2
text-processing
bioinformatics
Anna1364
источник
источник
sed
чтобы заменить вещи, которые вам неawk
sed 's/N//g ; s/\s//g' file | awk '{ print length($0); }'
Ответы:
GNU awk решение:
FPAT='[^N[:space:]]'
- шаблон, определяющий значение поля (любой символ, кромеN
символа и пробела)Ожидаемый результат:
источник
источник
awk '{print gsub(/[^ N]/,"")}'
предполагая, что количество необходимо для каждой строки, кроме пробела и
N
tr
- сколько символов было заменено.c
дополнить набор символов, данных-l
параметра, удаляет символ новой строки из строки ввода, чтобы избежать ошибки, а также добавляет символ новой строки для оператора печатиБолее общее решение
-a
возможность автоматического разделения строки ввода на пробелы, сохраненные в@F
массивеgrep {$_ ne "N"} @F
возвращает массив всех элементов, в@F
которых не совпадает строкаN
grep {!/^N$/} @F
scalar
даст количество элементов массиваисточник
Альтернативное решение awk :
gsub(...)
-gsub()
Функция возвращает количество сделанных замен.Выход:
источник
Другой
awk
подход (вернет -1 для пустых строк).Или в комплексе, он вернет -1 в пустых строках, 0 только в строках пробелов (табуляции / пробелов).
источник
-1
для пустых строк ... но тогда это было бы желательно , чтобы выделить строку, состоящую только из N / пространства против пустой строки ...tr
и сценарий оболочки POSIX :bash
,ksh
иzsh
:источник
awk '{print length()}'
чтобы избежать более медленного зацикливания оболочки ... но тогда можно было бы делать все с помощью самого awk ...awk
зацикливание это быстрее , чем оболочка зацикливание. Но оболочка всегда находится в памяти и,awk
возможно, не будет - когдаawk
она еще не загружена или не выгружена, накладные расходы на ее загрузку ( потерянное время ) могут быть больше, чем преимущество при запуске,awk
особенно на небольших петля. В таких случаях ( т.е. в этом случае),awk
может быть медленнее .awk
в сценарии оболочки может заставить такую систему ползать на четвереньках. Как правило: та же задержка перетаскивания применяется к системам с ограниченным программным обеспечением или любой системе с большой нагрузкойКраткая комбинация
tr
иawk
:Это удаляет все пробелы Ns из входного файла и
awk
просто печатает длину каждой строки.источник
Другой простой способ - сделать это на python, который предустановлен в большинстве сред Unix. Перетащите следующий код в файл .py:
А затем сделайте:
С вашего терминала. Что выше делает:
источник