Команда split — разбиение файла на несколько частей



Иногда бывает необходимо разбить один большой файл на несколько файлов меньшего объема. Для примера рассмотрим ситуацию, когда вы хотите перенести на свой домашний компьютер файл song.mp3 формата MP3, размером в 4,894,425 байт. Возможности перекачать этот файл по сети у вас нет, и единственно возможный способ переноса — воспользоваться дискетами. Но поскольку на одну дискету файл не помещается, требуется разбить его на несколько маленьких файлов, а потом собрать снова. Для решения этой задачи можно воспользоваться командой split.

Команда split копирует файл, разбивая его на отдельные файлы заданной длины. В качестве аргументов ей надо указать имя исходного файла и префикс имен выходных файлов. Имена выходных файлов будут составляться из этого префикса и двух дополнительных букв «aa», «ab», «ac» и т. д. (без пробелов и точек между префиксом и буквами). Если префикс имен файлов не задан, то по умолчанию используется «x», так что выходные файлы будут называться «xaa», «xab» и т. д.

Кроме аргументов можно задать опцию -b, определяющую размер выходных файлов в байтах. Вслед за -b должно стоять число, а за ним – буква k (показывающая, что размер выходного файла указан в килобайтах) или m (значит размер задан в мегабайтах). Если опция не задана, то по умолчанию размер выходных файлов принимается равным 1 Мбайту. Таким образом, для того чтобы перенести на дискетах файл song.mp3, надо вначале дать команду

[user]$ split –b1400k song.mp3 song

скопировать полученные файлы song.aa, song.ab, song.ac, song.ad, song.ae на отдельные дискеты, перенести их на домашний компьютер, скопировать в какой–нибудь каталог и восстановить исходный файл с помощью команды

[user]$ cat song.* > song.mp3

после чего можно удалить временные файлы song.xx.

Сравнение файлов и команда patch

Вы не замечали, что задача сравнения содержимого двух различных файлов возникает при работе с компьютером на удивление часто? Конечно, ведь так легко скопировать файл, а потом забываешь, какая же из версий новее или качественнее (по одному автору ведомым критериям). Так что инструменты для сравнения файлов просто необходимы, и Linux такие инструменты предоставляет.

Простейший из них — команда cmp. Эта команда просто сравнивает содержимое двух файлов побайтно:

[user]$ cmp file1 file2

Если файлы полностью совпадают, она молча заканчивает свою работу (происходит возврат к командной строке без каких–либо дополнительных сообщений), а если файлы различаются, выдаются номер строки и номер байта в строке, где имеет место первое различие.

Конечно, информации, выдаваемой командой cmp, часто бывает недостаточно, чтобы принять, например, решение о том, какой из двух файлов нам более ценен. Поэтому стоит воспользоваться командой diff для получения полного отчета о том, каковы же различия в интересующих нас файлах. Для получения отчета достаточно указать команде, какие именно файлы сравнивать:

[user]$ diff paper.old paper.new

Отчет о выявленных различиях будет выдан на стандартный выход. Естественно, его лучше перенаправить в файл:

[user]$ diff paper.old paper.new >paper.diff

Для оценки версий одного и того же файла более удобной может оказаться команда sdiff, которая выдает результат сравнения в виде двух столбцов, разделенных пробелами. Если строки с одинаковыми номерами в файлах различаются, то в выводе команды sdiff они разделены вертикальной чертой |. Если строка имеется только в первом файле, она отмечена знаком <. Соответственно строка, встречающаяся только во втором файле, помечена знаком >.

Существует также команда diff3, которая позволяет сравнить сразу  3 файла.

Но все же наиболее часто используется традиционная для UNIX–систем команда diff. Эта ее востребованность объясняется тем, что создаваемый ею отчет о различиях двух файлов может быть использован командой patch. Чаще всего эти возможности используются при распространении обновлений программного обеспечения. Предположим, что некоторое программное приложение было разослано пользователям в виде файла program.c, содержащего исходный код программы на языке Си. После этого разработчик внес в программу некоторые исправления и сохранил текст в виде файла program.c.new. Требуется довести исправленный текст программы до пользователей. Очевидно, что пользователям достаточно сообщить только исправления, т. е. отчет об изменениях, создаваемый по команде

[user]$ diff program.c program.c.new > program.c.diff

Естественно, объем файла program.c.diff существенно меньше объема файла program.c.new, так что можно было бы получить существенную экономию на передаче файлов, если отправлять пользователям только файл program.c.diff(ведь объемы современных программных приложений составляют десятки мегабайт). Однако пользователи должны иметь возможность внести эти исправления в имеющуюся у них версию программы. Эту задачу позволяет решить команда patch. Имея файлы program.c и program.c.diff, пользователь может дать команду

[user]$ patch program.c program.c.diff > program.c.new

в результате выполнения которой он получит файл program.c.new.

Сортировка текстовых файлов

Утилита sort упорядочивает записи файла в алфавитно–цифровом порядке.
Пример:
$ sort имя–файла
Bill Williams 100
Henry Morgan 112
Mary Clark 101
$

Записи отсортированы по первой букве имени. Однако можно выполнить сортировку и по фамилиям:
$ sort +1 имя–файла
Mary Clark 102
Henry Morgan 112
Bill Williams 100
$

Ключ +1 означает, что одно поле с начала записи было игнорировано при сортировке.

Сортировка по третьему полю с игнорированием лидирующих пробелов выполняется с использованием ключа -b (blank): $ sort -b +2 people

Пример результата выполнения:
Bill Williams 100
Mary Clark 101
Henry Morgan 112
$

Для сохранения результата сортировки в файле используется ключ -o (output):
sort -o sortpeople +1 people
Для слияния уже отсортированных файлов используется ключ -m.
Пример:

$ sort +1 имя–файла1> sort1
$ sort +1 имя–файла2> sort2
$ sort +1 имя–файла3> sort3
$ sort –m +1 sort1, sort2, sort3 > sortall
$

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

Подсчет числа строк, слов и знаков в заданном файле выполняется командой wc.
Например:
$ wc people
3 9 51 people
$

Ключи -l (lines), -w (words), -c (character) могут указать явно объекты  счета.

Например:
$ wc –l people
3 people
$ wc –lc people
10 51 people
$


Дата добавления: 2018-11-24; просмотров: 208; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!