17

Text-Fu [Часть 5]

Обо всех ошибках пишите в комментарии

Содержание:

Часть 1

Часть 2

Часть 3

Часть 4

13. tr (Translate / перевод)

Команда tr (translate / перевод) позволяет вам переводить набор символов в другой набор символов. Давайте попробуем пример перевода всех символов в нижнем регистре в символы верхнего регистра.

$ tr a-z A-Z
hello
HELLO

Как вы можете видеть, мы определили промежутки a-z в A-Z, и весь текст, который мы ввели в нижнем регистре, появился в верхнем регистре.

Упражнения:

Попробуйте следующую команду, что происходит?

$ tr -d ello
hello

14. uniq (Unique / уникальный)

Команда uniq (unique / уникальный) - другой полезный иструмент для обработки текста.

Давайте скажем, что у нас есть файл с множеством дубликатов:

reading.txt
book
book
paper
paper
article
article
magazine

И вы хотите удалить эти дубликаты, давайте применим команду uniq:

$ uniq reading.txt
book
paper
article
magazine

Давайте получим количество копий для каждой строки в файле:

$ uniq -c reading.txt
2 book
2 paper
2 article
1 magazine

Давайте просто получим уникальные значения:

$ uniq -u reading.txt
magazine

Давайте просто получим дублирующиеся значения:

$ uniq -d reading.txt
book
paper
article

Примечание: uniq не обнаруживает дублирующиеся линии, если они не соседи. Например:

Давайте скажем, что у вас есть файл с дубликатами, которые не соседствуют:

reading.txt
book
paper
book
paper
article
magazine
article
$ uniq reading.txt
reading.txt
book
paper
book
paper
article
magazine
article

Результат, возвращенный uniq содержит все значения, в отличии от первого примера:

Чтобы обойти это ограничение, мы можем использовать uniq вместе с sort:

$ sort reading.txt | uniq
article
твенно.
book
magazine
paper

Упражнения:

Какой результат вы получите, если попробуете uniq -uc?

15. wc and nl

Команда wc (word count / число слов) показывает полное количество слов в файле.

$ wc /etc/passwd
96  265  5925 /etc/passwd

Это покажет количество строк (lines), число слов (words) и количество байтов (char), соответственно.

Чтобы увидеть число только конкретного поля, используйте -l, -w, -c соответственно.

$ wc -l /etc/passwd
96

Другая команда, которой вы можете узнать количество строк в файле - nl (number lines / количество строк).

file1.txt
i
like
turtles
$ nl file1.txt
1. i
2. like
3. turtles

Упражнения:

Как вы можете получить полное количество строк в файле, используя nl без поиска по всему выводу? Подсказка: Используйте некоторые другие команды, о которых вы узнали в этом курсе.

16. grep

Команда grep, возможно наиболее важная команда, в отношении обработки текста, которую вы будете использовать. Она позволяет вам искать файлы по особенностям, которые совпадают с некоторым шаблоном. Что если бы вы хотели знать, существует ли файл в некоторой директории, или если бы вы хотели узнать, есть ли строка в файле? Конечно, вам не придется копаться в каждой строчке текста, вы будете использовать grep!

Давайте будем использовать наш файл sample.txt как пример:

$ grep fox sample.txt

Вы должны увидеть, что grep нашел fox в нашем sample.txt.

Вы также можете задавать шаблоны, которые не чувствительны к регистру с флагом -i.

$ grep -i somepattern somefile

Чтобы получить большую гибкость с grep вы можете сочетать его с другими командами с |.

$ env | grep -i User

Как вы можете видеть, grep довольно универсален. Вы даже можете использовать регулярные выражения в вашем шаблоне:

$ ls /somedir | grep '.txt$'

Должно вернуть все файлы, оканчивающиеся на .txt в директории somedir.

Упражнения:

Возможно, вы слышали о egrep или fgrep, эти устаревшие вызовы grep заменены на grep -E и grep -F. Прочитайте man grep, чтобы узнать больше.

На этом заканчивается наш курс, надеюсь, что вам понравилось, пишите ваши пожелания в комментарии!

GNU/Linux

1.2K пост15.6K подписчика

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

Вы смотрите срез комментариев. Показать все
0
Автор поста оценил этот комментарий

Отлично! А по AWK есть гайд? Пытаюсь разобраться, а не выходит... А лабу итоговую завтра сдавать. А сессия в пятницу заканчивается ;((

раскрыть ветку (3)
0
Автор поста оценил этот комментарий
AWK - язык, который? А что именно не понятно? Регулярные выражения?
раскрыть ветку (2)
0
Автор поста оценил этот комментарий

Да саму структуру не могу объватить мозгами. А время горит. Вот, к примеру.

1. Напишите программу, которая, на основе ekstraklasa.dat, выведет все результаты с определенной командой(футбольной), например, Wisla. Пример результата выполнения:

Pogon-Wisla 0-0

Legia-Wisla 1-0

# Ну вот здесь готовое выражение, ничего менять в принципе не надо..

awk '/Wisla/ {print $1 $2}' ekstraklasa.dat

2. Напишите программу, которая выведет матч(или матчи) с наибольшим количеством забитых голов. Пример:

Pogon-Wisla 3-3

Legia-Wisla 6-0


3. Напишите программу, которая подсчитает суммарное количество зрителей для каждой группы(по 4 команды). Пример:

Liczba widzow: 1256345

4. Напишите программу, которая из каждой группы выведет матч с максимальным количеством зрителей. Подразумевается, что нет матчей с одинаковым количеством зрителей. Пример:

1. Jagiellonia-Legia - 22355

2. Gornik-Legia - 24111


5. Напишите программу, которая сгенерирует таблицу по следующей формуле:

Место Команда Группа П Н Пр Очки Г+ Г-

--------------------------------------------------------------------

1. JAGIELLONIA 3 3 0 0 9 6 2

2. WIDZEW 3 2 1 0 7 3 2

Где П- победы, Н- ничьи, Пр - поражения, Г+ - забитые, Г- пропущенные. Победа - 3 очка, ничья - 1, проигрыш - 0.

6. Напишите программу, которая графически покажет, какой процент от /home занимают домашние папки пользователей. "*" = "%" Пример:

student **************************************************************************

lpic ***

john ******************

max ******************************

0
Автор поста оценил этот комментарий

Ну и сам esktraklasa.dat


Jagiellonia-Legia 2:0, 22567

Lech-Widzew 3:3, 5673

Gornik-Ruch 0-2, 15723

Pogon-Wisla 0-0, 4523


Jagiellonia-Pogon 6:0, 12453

Lech-Ruch 3:3, 5673

Widzew-Gornik 1-2, 7823

Legia-Wisla 1-0, 34523


Wisla-Jagiellonia 2:3, 16435

Ruch-Widzew 0-0, 2341

Gornik-Legia 3-1, 24111

Pogon-Lech 1-1, 7399

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку