Компьютерные сети и технологии
Привет
Пользователь:

Пароль:



[ ]
[ ]

В сети
Гостей: 9
Участников: 0
На странице: 1
Участников: 3867, Новичок: ritasovurova

Разное

(Занятие 10) awk - язык сканирования и обработки текста
Операционная система UNIX (руководство пользователя)
на Friday 04 August 2006
от список авторов отправить по email статья печатать статья
в Сетевые Операционные Системы ОС > Linux - Unix



10.14. Поле переменных

Поля текущей записи могут ссылаться на поле переменных $1, $2, ... $NF. Эти переменные могут использоваться в арифметических или строковых операциях, им могут присваиваться различные значения. Например, вы можете разделить второе поле файла countries на 1000, чтобы площадь измерялясь не в тысячах, а в миллионах квадратных метров:

    

или назначить новую строку полю:

        BEGIN                  
        $4 == "North America"  
        $4 == "South America"  
                               

Действие BEGIN устанавливает поле разделителя вводного файла (FS) и поле разделителя выводного файла (OFS) в значение табуляции. Обратите внимание, что print в четвертой строке программы печатает значение $0 после того как оно было модифицировано предыдущими присвоениями.

К полям можно получить доступ при помощи выражений. Например,

    $(NF-1)

означает: со второго до последнего поля текущей записи. Здесь необходимы круглые скобки, т.к. значение $NF-1 означает: на единицу меньше, чем значение последнего поля.

Поле переменных, ссылающееся на несуществующее поле, например, $(NF+1), имеет в качестве своего начального значения пустую строку. Тем не менее новое поле может быть создано при присвоении ему значения. Например, следующая программа, вызвавшая файл countries, создает пять полей, дающих плотность населения:

        BEGIN   
                

Количество полей может изменяться от записи к записи, но обычно число их ограничивается 100 полями.

10.15. Номер или строка

Переменные, поля и выражения могут иметь цифровое или строчное значение в соответствии с контекстом. Например, в контексте выражения, подобного следующему:

    pop += $3

pop и $3 должны трактоваться как цифровые.

В контексте строки, подобной:

    print $1 ":" $2

строки $1 и $2 сливаются.

В операторах присвоения "v = e" или "op = e" тип "v" станет таким же, как и у "e". В двухсмысленном контексте:

    $1 == $2

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

Если два операнда являются цифровыми, то сравнение будет цифровым, если операнды являются строковыми, то сравнение - строковое. Все поля переменных имеют строковый тип; дополнительно каждое поле, которое содержит только цифры, имеет цифровой тип. Например, сравнение "$1 == $" успешно выполнится для любой части ввода:

    1 1.0 +1 0.1e+1 10E-1 001

но неуспешно для:

        (ноль)  0
        (ноль)  0.0
        0a      0
        1e50    1.0e50

Существуют две идиомы приведения выражения к одному или другому типу:

number"" - присоединяет нулевую строку к number для приведения к строковому типу;
string+0 - добавляет ноль к string для приведения к цифровому типу.

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

    $1 "" == $2 ""

Так значение: "12.34x" равно 12.34, а значение "x12.34" равно нулю.

Значение строки арифметического выражения вычисляется путем формирования строки с преобразованием формата выводного файла.

Неустановленные переменные имеют цифровое значение 0 (ноль) и строковое значение "".

Несуществующие поля имеют только строковое значение ""; они не являются цифровыми.



Поиск Компьютерные сети и технологии

Copyright © 2006 - 2020
При использовании материалов сайта ссылка на xnets.ru обязательна!