Поиск…


Синтаксис

  • индекс (большой, маленький)
  • длина или длина ()
  • Длина (строка)
  • match (string, regex)
  • split (строка, массив, разделитель)
  • split (строка, массив)
  • sprintf (формат, ...)
  • sub (regex, subst, string)
  • sub (regex, subst)
  • gsub (regex, subst)
  • gsub (regex, subst, string)
  • substr (строка, начало, конец)
  • substr (строка, начало)
  • ToLower (строка)
  • ToUpper (строка)

параметры

параметр подробности
большой Строка, отсканированная для «маленького».
конец Индекс, по которому заканчивается подстрока.
формат Строка формата printf .
немного Строка для сканирования в «большом».
регулярное выражение Расширенное регулярное выражение .
Начните Индекс, с которого начинается подстрока.
строка Строка.
Подст Строка для замены для согласованной части.

Преобразование строки в верхний регистр

Функция toupper преобразует строку в верхний регистр (заглавные буквы). Например:

BEGIN {
    greeting = "hello"
    loud_greeting = toupper(greeting)
    print loud_greeting
}

Этот код выдает «HELLO» при запуске.

Конкатенация строк

Конкатенация строк выполняется просто путем написания выражений рядом друг с другом без какого-либо оператора. Например:

BEGIN {
   user = "root"
   print "Hello "user "!"
}

будет печатать: Hello root!

Обратите внимание, что выражения не должны разделяться пробелами.

Вычисление хеша строки

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

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

Для демонстрационных целей мы добавляем правило, чтобы украшать строки ввода хешем, но это правило не требуется для использования функции:

BEGIN{
  for(n=0;n<256;n++) {
    ord[sprintf("%c",n)] = n
  }
}

function hash(text, _prime, _modulo, _ax, _chars, _i)
{
  _prime = 104729;
  _modulo = 1048576;
  _ax = 0;
  split(text, _chars, "");
  for (_i=1; _i <= length(text); _i++) {
    _ax = (_ax * _prime + ord[_chars[_i]]) % _modulo;
  };
  return sprintf("%05x", _ax)
}

# Rule to demonstrate the function
#  These comments and the following line are not relevant
#  to the definition of the hash function but illustrate
#  its use.

{ printf("%s|%s\n", hash($0), $0) }

Мы сохраняем программу выше в файл hash.awk и демонстрируем ее в кратком списке классических английских книг:

awk -f hash.awk <<EOF
Wuthering Heights
Jane Eyre
Pride and Prejudice
The Mayor of Casterbridge
The Great Gatsby
David Copperfield
Great Expectations
The Return of the Soldier
Alice's Adventures in Wonderland
Animal Farm
EOF

Выход

6d6b1|Wuthering Heights
7539b|Jane Eyre
d8fba|Pride and Prejudice
fae95|The Mayor of Casterbridge
17fae|The Great Gatsby
c0005|David Copperfield
7492a|Great Expectations
12871|The Return of the Soldier
c3ab6|Alice's Adventures in Wonderland
46dc0|Animal Farm

При применении к каждой из 6948 непустых строк моего любимого романа эта хэш-функция не вызывает никакого столкновения.

Преобразование строки в нижний регистр

AWK часто используется для управления целыми файлами, содержащими список строк. Скажем, файл awk_test_file.txt содержит:

First String
Second String
Third String

Чтобы преобразовать все строки в нижний регистр:

awk '{ print tolower($0) }' awk_test_file.txt

Это приведет к:

first string
second string
third string

Подстановка текста строки

Функция SUB позволяет заменить текст внутри awk

sub (регулярное выражение, замена, цель)

где regexp может быть полным регулярным выражением

$ cat file
AAAAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG
$ awk '{sub("AAA","XXX", $0); print}' file
XXXAA
BBBB
CCCC
DDDD
EEEE
FFFF
GGGG

Выделение подстроки

GNU awk поддерживает функцию извлечения подстроки для возврата последовательности символов фиксированной длины из основной строки. Синтаксис

*substr(string, start [, length ])* 

где, string - это string источника и start отметка начала позиции подстроки, которую вы хотите, чтобы извлечение выполнялось для необязательных символов длины length . Если длина не указана, извлечение выполняется до конца строки.

Первый символ строки рассматривается как символ номер один.

awk '
BEGIN {
    testString = "MyTESTstring"
    substring  =  substr(testString, 3, 4)    # Start at character 3 for a length of 4 characters
    print substring
}'

выведет подстроку TEST .

awk '
BEGIN {
    testString = "MyTESTstring"
    substring  =  substr(testString, 3)    # Start at character 3 till end of the string
    print substring
}'

это извлекает подстроку из позиции символа 3 в конец всей строки, возвращая TESTstring

Заметка:-

  • Если для start задано отрицательное значение, GNU awk печатает всю строку, а если length задана ненулевым значением, то поведение GNU awk возвращает null строку, и поведение варьируется в разных реализациях awk .


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow