Посчитайте, сколько слов в файле test.txt начинаются с «tol»? - PullRequest
1 голос
/ 17 октября 2019

Я новичок в оболочке Linux. Я знаю, что для этого есть инструменты, такие как awk. Но мне интересно, смогу ли я сделать это, используя grep или wc или другие команды? awk кажется мне пугающим. Благодарю.

Я пробовал grep и wc, вот так:

grep tol test.txt | wc -w

Но grep выдаст мне всю строку.

Если я попробую следующее:

grep '^tol$*' test.txt | wc -w

Он только считает, что строка начинается с мол.

Как я могу отобразить слова, начинающиеся с тол?

Ответы [ 3 ]

2 голосов
/ 17 октября 2019

Вы можете сделать то же самое довольно просто с помощью awk, например,

awk '{for(i=1;i<=NF;i++) $i~/^tol/ && n++} END {print n}'

Пример

$ echo -e "tolerance topaz tolstoy\nbats toluene toledo" |
> awk '{for(i=1;i<=NF;i++) $i~/^tol/ && n++} END {print n}'
4
2 голосов
/ 17 октября 2019

Примерно так:

grep -o '\<tol[[:alpha:]]*\>' test.txt | wc -w

< - для начала слова,

> - конец слова.

[[:alpha:]] - чтобы избежать совпадения комбинаций, таких как tol123 (Вы сказали, что вам нужны только слова).

-o - показывать только совпадения, а не всю строку.

1 голос
/ 17 октября 2019

Другой вариант - перевести все пробельные символы в перевод строки, чтобы каждое слово начиналось с новой строки, а затем grep может считать их самостоятельно:

echo -e "tolerance topaz\ttolstoy\nbats toluene toledo" | tr '[:space:]' '\n' | grep -c "^tol"
4

Или, если используется файл с именем words.txt:

tr '[:space:]' '\n' < words.txt | grep -c "^tol"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...