Tag Archives: fmt

Process text streams using filters (Weight 3)

Candidates should should be able to apply filters to text streams.
Send text files and output streams through text utility filters to modify the output using
standard UNIX commands found in the GNU textutils package.

The following is a partial list of the used files, terms and utilities

cat
tac
cut
expand
unexpand
fmt
head
od
join
nl
paste
pr
sort
split
tail
tr
uniq
wc

Вопросы по LPI (приблизительные)
Ответы

Фильтрация текста — это процесс преобразований над входным потоком текста до того как он будет выдан в выходной поток. Хотя как входной, так и выходной поток могут поступать из файла, в системах Linux и UNIX фильтрация преимущественно осуществляется через конвейер команд, когда вывод одной команды связывается или перенаправляется на ввод следующей команды.

Интерпретатор оперирует с тремя стандартными потоками ввода/вывода:

stdin это стандартный поток ввода, через который поступает ввод командам
stdout это стандратный выходной поток, через который команды выводят свой выход
stderr это стандартный поток ошибок, через который выводятся ошибки в командах

Конвейер с помощью |

Команды обработки текста (фильтры) могут принимать входной поток, как из стандартного ввода, так и из файла. Чтобы использовать выход команды command1, как входной фильтр command2 вы должны соединить команды с помощью операции конвейерезации (|)

# command1 | command2

Вы можете также использовать | для перенаправления вывода command2 в этом конвейере на вход другой команде, command3. Конструируя длинные конвейеры из команд, каждая из которых выполняет свою задачу, можно понять философию выполнения задач в Linux и UNIX.

# command1 | command2 | command3

Также иногда вы будете видеть знак дефиса (-) вместо имени файла в качестве аргумента команды, в том значении, что ввод будет поступать из stdin, а не из файла.

Перенаправление вывода с помощью >

# echo -e “1 103.1 Work on the command line\n2 103.2 Process text streams using filters\n3 103.3 Perform basic file and directory management” > LPI1

Просмотреть созданный файл можно командой cat. Команда cat принимает ввод из stdin, если вы не определите имя файла
cat (сокращение от catenate – eng. сцеплять, связывать)

# cat LPI1
1 103.1 Work on the command line
2 103.2 Process text streams using filters
3 103.3 Perform basic file and directory management

Создание текстового файла с помощью cat (Используйте комбинацию Ctrl-d чтобы послать сигнал конца файла)

# cat > LPI2
103.4 Use streams, pipes, and redirects
103.5 Create, monitor, and kill processes
103.6 Modify process execution priorities

Соединим (Concatenating) два файла в один

# cat LPI*
# cat LPI1 LPI2
1 103.1 Work on the command line
2 103.2 Process text streams using filters
3 103.3 Perform basic file and directory management
103.4 Use streams, pipes, and redirects
103.5 Create, monitor, and kill processes
103.6 Modify process execution priorities

Показывать конец строки опция -E, будет отображаться знак $ в конце строки

# cat -E LPI1
1 103.1 Work on the command line$
2 103.2 Process text streams using filters$
3 103.3 Perform basic file and directory management$

Показать номера строк опция -n

# cat -n LPI2
1 103.4 Use streams, pipes, and redirects
2 103.5 Create, monitor, and kill processes
3 103.6 Modify process execution priorities

tac — Unix-утилита, выводящая строки указанных файлов в обратном порядке

# tac LPI1
3 103.3 Perform basic file and directory management
2 103.2 Process text streams using filters
1 103.1 Work on the command line

od — (OctalDump) Unix-утилита, для вывода дампа файла в разных форматах. С разными параметрами, с помощью od можно увидеть содержимое файла в шестнадцатеричном, восьмеричном, десятичном и пр.

od [- опции] [-A в каком формате будет колонка позиций ] [-j начать с какого байта ] [-N длина ] [-t формат вывода ] [файл]

[-A в каком формате будет колонка позиций ]
o восьмеричное - по умолчанию
d десятичное
x шестнадцатеричное
n смещения не отображаются
# od LPI1
0000000 020061 030061 027063 020061 067527 065562 067440 020156
0000020 064164 020145 067543 066555 067141 020144 064554 062556
0000040 031012 030440 031460 031056 050040 067562 062543 071563
0000060 072040 074145 020164 072163 062562 066541 020163 071565
0000100 067151 020147 064546 072154 071145 005163 020063 030061
0000120 027063 020063 062520 063162 071157 020155 060542 064563
0000140 020143 064546 062554 060440 062156 062040 071151 061545
0000160 067564 074562 066440 067141 063541 066545 067145 005164
0000200

split — (eng. дробление, расщеплять) Unix-утилита, копирующая файл и разбивающая его на отдельные файлы заданной длины.

Опции команды split
-a, –suffix-length=Н использовать суффиксы длины Н (по умолчанию 2)
-b, –bytes=ЧИСЛО записывать в каждый выходной файл заданное ЧИСЛО байт
-C, –line-bytes=ЧИСЛО записывать не более заданного ЧИСЛА байт из строки
-d, –numeric-suffixes использовать числовые, а не алфавитные суффиксы (по умолчанию алфавитные суффиксы)
-l, –lines=ЧИСЛО записывать в каждый выходной файл заданное ЧИСЛО строк
–verbose печатать сообщение в стандартный поток ошибок перед открытием очередного выходного файла
–help показать эту справку и выйти
–version показать информацию о версии и выйти

Разделим файл LPI3 построчно в файл LPI4

# split -l 1 LPI3 LPI4
# ls LPI4*
LPI4aa  LPI4ab  LPI4ac  LPI4ad  LPI4ae  LPI4af

Разделим большой архив на мелкие части и соберем обратно

# du -sh music.tar.gz
27M	music.tar.gz
# split -d --suffix-length=4 --bytes=10M music.tar.gz music
# du -sh music0*
10M	music0000
10M	music0001
6,6M	music0002
# cat music0* > music2.tar.gz

wc (word count — eng. количество слов) — Unix-утилита, выводящая число переводов строк, слов и байт для каждого указанного файла и итоговую строку, если было задано несколько файлов. Если входной файл не задан, или равен ‘-‘, то данные считываются со стандартного ввода.

Опции команды wc
-c, –bytes напечатать число байт
-m, –chars напечатать число символов
-l, –lines напечатать число переводов строк
-L, –max-line-length напечатать длину наибольшей строки
-w, –words напечатать число слов
–help показать эту справку и выйти
–version показать информацию о версии и выйти

# wc LPI3
6  39 252 LPI3
# wc LPI1 LPI2 LPI3
3  22 128 LPI1
3  17 124 LPI2
6  39 252 LPI3
12  78 504 итого

Посчитать количество срок

# cat /var/log/messages | wc -l
2485

Текстовые потоки и фильтры