🐹 CentOS 7: Как с помощью bash посчитать количество слов в файле и вывести слово в зависимости от того, где оно находится в файле.

Содержание:

1. Задача.
2. Выполнение задачи.

2.1. Способ простого вывода слова по указанному порядковому номеру.
2.2. Способ указания диапазона поиска в тексте.
2.3. Способ отслеживания пробелов перед словами.

3. Оригиналы источников информации.


1. Задача.

Задача: В примере есть простой файл *.txt. Требуется написать bash для вывода определенного слова, в зависимости от того, где оно находится в файле.

2. Выполнение задачи.

К примеру есть текстовый файл с одержимым:

# cd ~

# mcedit mice_and_mystics.txt

«О мышах и тайнах» (Mice and Mystics) — это кооперативная приключенческая настольная игра. Ключевой особенностью является сказочный сюжет, который создаётся прямо у нас на глазах. Дело в том, что в этой игре мы постоянно сталкиваемся с различными выборами, а от принятых решений зависит, где мы окажемся и как себя поведут сказочные персонажи. Никогда не знаешь, куда тебя заведёт выбранный путь! Итак, давным-давно, в незапамятные времена, существовало на свете Королевство людей. Правил ими добрый король Эндон. Он был хорошим, щедрым человеком, и все подданные любили его. К несчастью, его супруга рано скончалась, и своего единственного сына, принца Коллина, королю приходилось растить одному… По словам разработчика игры Джерри Хоторна, «О мышах и тайнах» — это не игра в сказку, а сказка, в которую можно играть на столе. Изначально Джерри создавал игру для своей маленькой дочери, которая только училась читать. На тот момент её любимыми животными были мышки, и Джерри пытался сделать настолько увлекательную игру про мышей, чтобы дочке самой захотелось бы проходить её дальше и читать всё больше игровых художественных вставок. Но Джерри немного перестарался. Потому что игра увлекла не только дочку, но и весь мир.

Вы можете посчитать количество слов в файле с помощью команды:

# wc -w < mice_and_mystics.txt

Ответ:

2.1. Способ простого вывода слова по указанному порядковому номеру.

Команда awk разбивает строку на пробелы и печатает $wordnumber строковую часть, а tr используется для удаления новых строк.

Выбирая значение wordnumber= вы можете указывать порядковый номер слова и его выведет на экран:

# cat mice_and_mystics.txt | tr -d '\n' | awk -v wordnumber=5 '{ print $wordnumber }'

# cat mice_and_mystics.txt | tr -d '\n' | awk -v wordnumber=55 '{ print $wordnumber }'

# cat mice_and_mystics.txt | tr -d '\n' | awk -v wordnumber=155 '{ print $wordnumber }'

Ответ:

2.2. Способ указания диапазона поиска в тексте.

Команда awk ищет первую строку FNR==1 и в substr берет слово по номеру расположения слова в диапазоне, который вы могли бы увеличить или сохранить в соответствии с вашими потребностями.

Так как у нас в тексте файла 184 слова, то диапазон поиска будет от 1 (первого) до 184 (крайнего) слова:

# awk 'FNR==1{print substr($5,1,184); next}' mice_and_mystics.txt

# awk 'FNR==1{print substr($55,1,184); next}' mice_and_mystics.txt

# awk 'FNR==1{print substr($155,1,184); next}' mice_and_mystics.txt

Ответ:

2.3. Способ отслеживания пробелов перед словами.

С пристальным отчетом пробелов:

# awk 'BEGIN{RS="[[:space:]]+"} NR==5' mice_and_mystics.txt

# awk 'BEGIN{RS="[[:space:]]+"} NR==55' mice_and_mystics.txt

# awk 'BEGIN{RS="[[:space:]]+"} NR==155' mice_and_mystics.txt

Ответ:

или

# gawk 'NR==5' RS="[[:space:]]+" mice_and_mystics.txt

# gawk 'NR==55' RS="[[:space:]]+" mice_and_mystics.txt

# gawk 'NR==155' RS="[[:space:]]+" mice_and_mystics.txt

Ответ:

Чтобы улучшить производительность, вы можете выйти из скрипта, когда совпадение найдено:

# gawk 'BEGIN{RS="[[:space:]]+"}NR==5{print;exit}' mice_and_mystics.txt

# gawk 'BEGIN{RS="[[:space:]]+"}NR==55{print;exit}' mice_and_mystics.txt

# gawk 'BEGIN{RS="[[:space:]]+"}NR==155{print;exit}' mice_and_mystics.txt

Ответ:

Решение подходит для всех дистрибутивов GNU/Linux.

3. Оригиналы источников информации.

  1. question-it.com «Заставить bash вывести определенное слово из файла .txt».

Читайте также: