zenity
не записывает результат вашего выбора в std-out. Попробуйте сами, запустив его в командной строке:
$ zenity --question
$
Как видите, ничего не отображается, поэтому ваши переменные TEST
пусты.
Вместо этого zenity
возвращает значение --question
в качестве статуса выхода. Это можно посмотреть (в bash) с помощью внутренней переменной $?
.
$ zenity --question
Выберите кнопку 'No':
$ echo $?
$ 1
Как объясняется на странице man, 0 означает 'Yes', 1 означает 'No', а 5 означает, что команда завершилась.
Таким образом, ваша команда должна выглядеть так:
$ zenity --question; echo test=$?
$ test=1
Обратите внимание, что разные команды zenity
ведут себя по-разному. Как объясняет man-страница, команда --entry
действительно отправляет свой вывод в std-out:
$ zenity --entry
$ Test 1..2..3..
Поэтому ваши тесты будут работать с этой конкретной командой.
Команда:
cat text.txt | tr ' ' '\n' | grep -v 'words\|word2' | sort | uniq -c | sort -nk1
Ниже приводится содержимое файла
$ cat file.txt
Lorem Ipsum - это просто фиктивный текст, используемый в полиграфической и наборной индустрии. Lorem Ipsum был стандартным фиктивным текстом в отрасли с 1500-х годов, когда неизвестный типограф взял камбуз шрифта и скремблировал его, чтобы сделать книгу образцов шрифта.
$ cat file.txt|tr ' ' '\n'| grep -v -w 'an\|a\|is'| sort| uniq -c| sort -nk1|tail 1 unknown 1 when 2 and 2 dummy 2 Ipsum 2 Lorem 2 of 2 text 2 type 3 the
Описание : Переведите пробел в новую строку, затем извлеките слова из списка, затем отсортируйте их и посчитайте для наиболее часто используемых
Рассмотрим этот тестовый файл:
$ cat text.txt
this file has "many" words, some
with punctuation. some repeat,
many do not.
Чтобы получить количество слов:
$ grep -oE '[[:alpha:]]+' text.txt | sort | uniq -c | sort -nr
2 some
2 many
1 words
1 with
1 this
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
grep -oE '[[: alpha:]] +' text.txt
Это возвращает все слова, без пробелов и знаков препинания, по одному слову в строке.
sort
Сортировка слов в алфавитном порядке.
uniq -c
Подсчитывает, сколько раз встречается каждое слово. (Для работы uniq
его входные данные должны быть отсортированы.)
sort -nr
Сортировка выходных данных численно так, чтобы наиболее часто встречающееся слово было вверху.
Рассмотрим этот тестовый файл смешанного случая:
$ cat Text.txt
This file has "many" words, some
with punctuation. Some repeat,
many do not.
Если мы хотим посчитать некоторые
и некоторые
как одно и то же:
$ grep -oE '[[:alpha:]]+' Text.txt | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 with
1 This
1 repeat
1 punctuation
1 not
1 has
1 file
1 do
Здесь мы добавлен параметр -f
в sort
, чтобы он игнорировал регистр, и параметр -i
для uniq
, чтобы он также игнорировал кейс.
Предположим, что мы хотим исключить эти стоп-слова из подсчета:
$ cat stopwords
with
not
has
do
Итак, мы добавляем grep -v
, чтобы исключить эти слова:
$ grep -oE '[[:alpha:]]+' Text.txt | grep -vwFf stopwords | sort -f | uniq -ic | sort -nr
2 some
2 many
1 words
1 This
1 repeat
1 punctuation
1 file