Сортировка строк текста : sort -ключи имена_файлов

Ключи:

-b игнорировать начальные пробелы

- u уникальная сортировка, повторяющиеся строки игнорируются

- с не сортировать, а только проверять отсортированы ли данные

- n сортировать численно, а не в алфавитном порядке

- f сортировка, нечувствительная к регистру

- r сортировка в обратном порядке

Команда sort может данные, полученные с входного потока сортировать и направлять на поток вывода.

Используем эту команду, для сортировки данных введенных с клавиатуры и записи в файл text1.

sort > text1 Запишем построчно слова:

bananas

carrots

apples

Эти слова со стандартного входа обрабатываются sort и уже в алфавитном порядке поступают на поток вывода, который перенаправлен в файл text1.

Выделение колонки текста: cut -ключи имена_файлов

Ключи:

-b заданиедиапазона в байтах (bytes)

- с задание диапазона в символах (characters)

- f выбирать заданные поля (fields)

- d C использовать символ C как разделитель между полями

Примечание: команда может использовать только один из ключей -b, -c или -f

Замена символов в строках: tr набор_символов1 набор_символов2

Набор_символов1 заменяется на набор_символов2, причем 1-ый символ из 1-го набора заменяется на 1-ый символ из 2-го набора, 2-ой - 2-ым и т.д.

Если второй набор не указан, то все символы, перечисленные в 1-ом наборе будут просто удалены.

Работа с повторяющимися подряд строками: uniq -ключи имена_файлов

Ключи:

подсчитать расположенные рядом повторяющиеся строки

- i нечувствительность к регистру

- u выводить только уникальные строки

- d выводить только повторяющиеся строки

Конвейеры

Нередко возникает ситуация, когда нужно обработать вывод одной команды какой- нибудь другой командой. То есть перенаправляется вывод одной команды не в файл, а на вход другой команды. Такой способ передачи называется конвейером и обозначается символом |.

Например, нужно отсортировать оглавление каталога в алфавитном порядке, т.е. результат команды ls передать команде sort.

ls | sort

Чтобы просматривать постранично длинный список файлов, выдаваемой командой ls, нужно использовать конвейер и обратиться к команде less, которая постранично выводит текст.

ls /usr/bin | sort | less

С помощью конвейера можно объединять в цепочку много команд:

Команда1 | команда2 |... | командаN

Рассмотрим более сложный пример. Напишем команды, которые позволят определить файлы какого типа в каком количестве содержатся в домашнем каталоге пользователя.

find ~ -type f | xargs -n1 file | cut -d: -f2 | sort | uniq -c

Для этого сначала мы должны отделить файлы от каталогов, используя команду find с ключом - type f. Получим в результате список всех файлов, содержащихся в домашнем каталоге. У каждого файла, используя команду file мы можем определить тип. Проблема в том, что команде file нужно построчно подавать значения из имеющегося у нас списка всех файлов. Здесь на помощь приходит команда xargs, которая считывает данные с выходного потока одной команды и передает их другой команде в качестве аргумента (ключ -n1 позволяет считывать и передавать данные построчно).

Команда file делает вывод данных в следующем формате:

имя_файла: тип

Например, listtext: ASCII text

Нам нужны только типы файлов, их имена нас не интересуют. Нужно вырезать данные второй колонки, для этого часто используется команда cut, ключ -d указывает символ, разделяющий колонки (в данном случае это двоеточие), ключ -f для указания какую по счету взять колонку.

Полученные данные (списки типов файлов) необходимо отсортировать командой sort и при помощи команды uniq, которая работает с повторяющимися строками, подсчитать расположенные подряд повторяющиеся строки (ключ -с), т.е. типы файлов.

Задание:

1. Создайте в домашнем каталоге каталог Dr1, в нем каталоги Dr2 и Dr3. В Dr2 создайте два текстовых файла: FIO (запишите в него свои ФИО) и GR (запишите в него N группы). В Dr1 создайте файл INFO, перенаправляя вывод из файлов FIO и GR.

2. Поместите в файл KALEND, созданный в каталоге Dr2, календарь на текущий месяц.

3. В домашнем каталоге создайте файл list, который будет содержать список всех файлов, содержащихся в домашнем каталоге, в алфавитном порядке.

4. В домашнем каталоге создайте файл commandlist, который будет содержать список файлов из каталогов /bin, /usr/bin в обратном алфавитному порядке.

5. Используя команду wc - l (word count - подсчет слов, ключ - l позволяет подсчитать количество строк) и команду find или ls, создайте конвейер, который позволит вам подсчитать количество файлов (строк, выдаваемых командой find или ls) в каталоге /bin.

6. Создайте ссылку на каталог Dr3 в каталоге Dr2.

7.В каталоге Dr3 создайте жесткую ссылку HFIO на файл FIO, допишите в конец этого файла место жительства. Просмотрите какие изменения произошли в файле FIO.

4. Создайте текстовый файл в ошибочной раскладке (набирайте русский текст в латинском регистре). При помощи команды tr преобразуйте текст в кирилличную раскладку. (Примечание: в некоторых версиях Linux команда работает не корректно с кириллицей. В этом случае замените одни латинские символы на другие).

5. Используя команду grep найдите все файлы домашнего каталога, содержащие слово mkdir (используйте ключ -l) и сохраните список этих файлов в файле mkd.

7. В файле TREE, созданном в домашнем каталоге, запишите список всех файлов и подкаталогов, находящихся в каталоге Dr1.

8. В каталоге Dr2 создайте файл Link, в котором для каждого файла каталога Dr2 будут указаны количество жестких ссылок и имя файла.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: