Шрифт:
$ cut -d: — f1,6 /etc/passwd
gopher:/usr/lib/gopher-data
ftp:/home/ftp
peter:/home/apps/peter
dave:/home/apps/dave
11.4.2. Вырезание отдельных символов
Опция -c позволяет указывать, какие конкретно символы необходимо извлекать из каждой строки входного потока. Применять эту опцию следует в том случае, если вы имеете дело со строками фиксированной длины
Рассмотрим такой пример. Когда в мою систему поступают файлы сообщений, я просматриваю их имена для определения источника, из которого они были получены. На основании этой информации производится сортировка файлов по каталогам.
Идентификатор источника содержится в последних трех символах имени файла. Вот примерный список имен файлов:
2231DG
2232DP
2236DK
Извлечение идентификаторов осуществляется с помощью такой команды:
$ 1s 223* | cut -с4–6
1DG
2DP
6DK
Показанная ниже команда возвращает список пользователей, зарегистрированных в данный момент в системе:
$ who! cut -c1-8
root
dave
peter
11.5. Вставка текста с помощью команды paste
С помощью команды cut отдельные символы и целые поля извлекаются из текстовых файлов или стандартного входного потока. Команда paste выполняет противоположное действие: она вставляет в выходной поток содержимое входных файлов. Прежде чем вставлять данные из разных источников, следует убедиться, что они содержат равное число строк, иначе будут сформированы неполные строки,
Команда paste объединяет строки с одинаковыми номерами: сначала берутся первые строки из каждого файла и объединенная строка записывается в выходной поток, затем берутся вторые строки, третьи и т. д. По умолчанию разделителем полей является символ табуляции, если только не указана опция -d, которая позволяют задать иной разделитель.
Формат команды paste таков:
paste [опции] файл…
Рассмотрим опции команды paste:
– d список
Сообщает команде paste о необходимости применять вместо табуляции другой разделитель полей. Допускается указывать список разделителей, В этом случае разделители используются циклически: между первыми двумя строками вставляется первый разделитель из списка, между следующими двумя — второй и т. д. Когда список заканчивается, осуществляется возврат к началу списка и процедура повторяется.
– s
Задает режим последовательного слияния строк каждого входного файла по отдельности
–
Означает выборку строки из стандартного входного потока
11.5.1. Определение порядка вставки столбцов
Для иллюстрации процедуры вставки обратимся к следующим двум файлам, полученным путем применения команды cut к рассмотренному выше файлу pers.
$ cat pas1
ID897
ID667
ID9B2
$ cat раs2
P. Jones
S. Round
L. Clip
По умолчанию команда paste вставляет столбцы один за другим:
$ paste pas1 pas2
ID897 P. Jones
ID667 S. Round
ID982 L. Clip
Порядок задания файлов в командной строке играет роль:
$ paste pas2 pas1
P. Jones ID897
S. Round ID667
L. Clip ID982
11.5.2. Выбор разделителя полей
Если требуется создать выходной файл, в котором разделителем полей будет какой-то другой символ вместо табуляции, воспользуйтесь опцией -d. В приведенном ниже примере строки объединяемых файлов разделяются двоеточием:
$ paste -d: pas2 pas1
P. Jones:ID897
S. Round:ID667
L. Clip:ID982
11.5.3. Слияние строк
Наличие опции -s заставляет команду paste работать немного по–другому: для каждого входного файла она выполняет слияние всех его строк, записывая результат в выходной поток. Представленная ниже команда сначала отображает все имена служащих, а затем — их идентификационные номера.
$ paste -a pas2 pas1
P. Jones S. Round L. Clip
ID897 ID667 ID982
11.5.4. Чтение данных и» стандартного входного потока
Команда paste имеет удобную опцию — (дефис), которая позволяет принимать данные из стандартного входного потока. Каждый дефис в командной строке соответствует одной колонке выходных данных. Например, список файлов каталога можно отобразить в четырехколоночном формате, как показано ниже: