Файл pers содержит имена, названия должностей и личные идентификационные номера служащих фирмы. Файл pers2 содержит для каждого из служащих код отдела, в котором он работает, идентификационный номер и стаж работы на фирме. В данном случае требуется выполнить соединение строк по номеру служащего. Он хранится в четвертом поле первого файла и во втором поле второго файла. Задать их в команде join можно с помощью опции -n т, где п — номер файла, a m — номер поля.
Ниже приведена соответствующая команда и результат ее выполнения:
$ join -1 4 -2 2 pers pers2
ID897 P. Jones Office Runner Dept2C 6 years
ID667 S. Round UNIX admin Dept3S 2 years
ID982 L. Clip Personl Chief Dept5Z 1 year
При работе с командой join следует быть внимательным, вычисляя номер нужного поля. Можно посчитать, что доступ реализуется к полю 4, а с точки зрения команды join это поле 5. В итоге будут получены неправильные результаты. Чтобы проверить, содержит ли поле с указанным номером предполагаемые данные, воспользуйтесь утилитой awk:
$ awk '{print $4}' имя_файла
11.4. Вырезание текста с помощью команды cut
Команда cut позволяет вырезать фрагменты строк из текстовых файлов или из стандартного входного потока. Извлеченный подобным образом текст направляется в стандартный выходной поток. Общий формат команды cut таков:
cut [опции] файлы…
Рассмотрим основные опции этой команды:
-c список Определяет, какие символы извлекаются из каждого входного файла
-f список Определяет, какие поля извлекаются из каждого входного файла
-d Задает разделитель полей
Параметр список в опциях -c и -f представляет собой разделенный запятыми список диапазонов символов или полей соответственно. Диапазон может быть задан в одной из четырех форм:
-n В выходной поток включается каждый n–й символ (поле) каждой строки
каждого входного файла
n- Диапазон формируется от n–го символа (поля) до конца строки
n–m Диапазон формируется от n–го символа (поля) до m–го символа (поля) включительно
-m Диапазон формируется от начала строки до m–го символа (поля)
В качестве входного файла мы возьмем файл pers из предыдущего примера, только на этот раз поля в нем будут разделены двоеточием.
$ cat pers
P. Jones:Office Runner:ID897
S. Round:UNIX admin:ID667
L. Clip:Personl Chief:ID982
Предположим, необходимо извлечь из файла список идентификационных номеров служащих, находящийся в третьем поле. Вот как можно это сделать:
$ cut -d: — f3 pers
ID897
ID667
ID982
Опция -d: говорит о том, что поля в файле разделяются двоеточием. Опция -f 3 задает выборку третьего поля.
Если требуется вырезать несколько полей, необходимо перечислить их в опции -f. Например, показанная ниже команда формирует список служащих с их идентификационными номерами:
$ cut -d: — f1,3 pers
P. Jones:ID897
S. Round:ID667
L. Clip:ID982
А вот как можно извлечь из каталога /etc/passwd регистрационные имена пользователей и имена их начальных каталогов, хранящиеся в полях 1 и 6 соответственно:
$ cut -d: — f1,6 /etc/passwd
gopher:/usr/lib/gopher‑data
ftp:/home/ftp
peter:/home/apps/peter
dave:/home/apps/dave
Опция -c позволяет указывать, какие конкретно символы необходимо извлекать из каждой строки входного потока. Применять эту опцию следует в том случае, если вы имеете дело со строками фиксированной длины
Рассмотрим такой пример. Когда в мою систему поступают файлы сообщений, я просматриваю их имена для определения источника, из которого они были получены. На основании этой информации производится сортировка файлов по каталогам.
Идентификатор источника содержится в последних трех символах имени файла. Вот примерный список имен файлов:
2231DG
2232DP
2236DK
Извлечение идентификаторов осуществляется с помощью такой команды:
$ 1s 223* | cut -с4–6
1DG
2DP
6DK
Показанная ниже команда возвращает список пользователей, зарегистрированных в данный момент в системе:
$ who! cut -c1-8
root
dave
peter
11.5. Вставка текста с помощью команды paste
С помощью команды cut отдельные символы и целые поля извлекаются из текстовых файлов или стандартного входного потока. Команда paste выполняет противоположное действие: она вставляет в выходной поток содержимое входных файлов. Прежде чем вставлять данные из разных источников, следует убедиться, что они содержат равное число строк, иначе будут сформированы неполные строки,