Я пытаюсь использовать tr с несколькими наборами и не уверен, как это сделать

StackOverflow https://stackoverflow.com//questions/22003685

  •  20-12-2019
  •  | 
  •  

Вопрос

Я использовал:

tr -dc [:alpha:] < $fileDoc | wc -c

чтобы сосчитать все буквы,

tr -dc ' ' < $fileDoc | wc -c

чтобы посчитать все пробелы,

tr -dc '\n' < $fileDoc | wc -c

для подсчета всех новых строк в текстовом документе.

Что я хотел бы сделать сейчас, так это посчитать все остальные символы в документе так, как я буду называть все остальное.

Вот текст из этого документа:

Здравствуйте, это тестовый текстовый документ.

123

!@#

Есть ли способ удалить все [:alpha:], , и \n нашли и подсчитали оставшиеся символы?

Это было полезно?

Решение

Это должно сделать трюк

tr -d '[:alpha:] \n'  < $fileDoc | wc -c
.

или, возможно, если вы хотите включить вкладки в определении пробелов

tr -d '[:alpha:][:space:]'  < $fileDoc | wc -c
.

На основании комментариев ОП, чтобы удалить алфавитные, пробелы, цифры и новинки и подсчитать все оставшиеся символы:

tr -d '[:alnum:][:space:]' < $fileDoc | wc -c
.

[:alnum:] Учетные записи для букв алфавита и цифр.[:space:] заботится обо всем пробеле, включая Newlines

Другие советы

Просто публикую здесь для справки, если вы хотите сделать все одним выстрелом, то это awk скрипт должен работать:

awk -v FS='' '
{
    for(i=1; i<=NF; i++) {
        if($i ~ /[a-zA-Z]/) {alpha++};
        if($i == " ") {space++};
        if($i !~ /[A-Za-z0-9 ]/) {spl++}
    }
}
END {
    printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file

$ cat file
This is a text
I want to count
alot of $tuff
in 1 single shot

$ awk -v FS='' '
{
    for(i=1; i<=NF; i++) {
        if($i ~ /[a-zA-Z]/) {alpha++};
        if($i == " ") {space++};
        if($i !~ /[A-Za-z0-9 ]/) {spl++}
    }
}
END {
    printf "Space=%s, Alphabets=%s, SplChars=%s, NewLines=%s\n", space, alpha, spl, NR
}' file
Space=11, Alphabets=45, SplChars=1, NewLines=4
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top