Linux awk длина строки

9.2. Работа со строками

Bash поддерживает на удивление большое количество операций над строками. К сожалению, этот раздел Bash испытывает недостаток унификации. Одни операции являются подмножеством операций подстановки параметров, а другие — совпадают с функциональностью команды UNIX — expr. Это приводит к противоречиям в синтаксисе команд и перекрытию функциональных возможностей, не говоря уже о возникающей путанице.

Длина строки

$ <#string>expr length $string expr «$string» : ‘.*’

Пример 9-10. Вставка пустых строк между параграфами в текстовом файле

Длина подстроки в строке (подсчет совпадающих символов ведется с начала строки)

expr match «$string» ‘$substring’

expr «$string» : ‘$substring’

где $substring — регулярное выражение.

Index

expr index $string $substring

Номер позиции первого совпадения в $string c первым символом в $substring.

Эта функция довольно близка к функции strchr() в языке C.

Извлечение подстроки

Извлекает подстроку из $string, начиная с позиции $position.

Если строка $string — » * » или » @ » , то извлекается позиционный параметр (аргумент), [1] с номером $position.

Извлекает $length символов из $string, начиная с позиции $position.

Если $string — » * » или » @ » , то извлекается до $length позиционных параметров (аргументов), начиная с $position.

expr substr $string $position $length

Извлекает $length символов из $string, начиная с позиции $position.

expr match «$string» ‘\($substring\)’

Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение.

expr «$string» : ‘\($substring\)’

Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение.

expr match «$string» ‘.*\($substring\)’

Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение. Поиск начинается с конца $string.

expr «$string» : ‘.*\($substring\)’

Находит и извлекает первое совпадение $substring в $string, где $substring — это регулярное выражение. Поиск начинается с конца $string.

Удаление части строки

Удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с начала строки

Удаление самой длинной, из найденных, подстроки $substring в строке $string. Поиск ведется с начала строки

Удаление самой короткой, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки

Удаление самой длинной, из найденных, подстроки $substring в строке $string. Поиск ведется с конца строки

Пример 9-11. Преобразование графических файлов из одного формата в другой, с изменением имени файла

Замена подстроки

Замещает первое вхождение $substring строкой $replacement.

Замещает все вхождения $substring строкой $replacement.

Подстановка строки $replacement вместо $substring. Поиск ведется с начала строки $string.

Подстановка строки $replacement вместо $substring. Поиск ведется с конца строки $string.

9.2.1. Использование awk при работе со строками

В качестве альтернативы, Bash-скрипты могут использовать средства awk при работе со строками.

Пример 9-12. Альтернативный способ извлечения подстрок

9.2.2. Дальнейшее обсуждение

Дополнительную информацию, по работе со строками, вы найдете в разделе Section 9.3 и в секции, посвященной команде expr. Примеры сценариев:

Источник

Linux awk длина строки

сЪЩЛ awk ЙНЕЕФ ОБВПТ ЧУФТПЕООЩИ ЖХОЛГЙК ДМС ЧЩРПМОЕОЙС ОЕЛПФПТЩИ Ч ЙЪЧЕУФОПН УНЩУМЕ УФБОДБТФОЩИ ПРЕТБГЙК.

gensub( r, s, h [, t] )
РТЕДОБЪОБЮЕОБ ДМС РПЙУЛБ Ч УФТПЛЕ t РПУМЕДПЧБФЕМШОПУФЙ, ЛПФПТБС ХДПЧМЕФЧПТСЕФ ТЕЗХМСТОПНХ ЧЩТБЦЕОЙА r . еУМЙ УФТПЛБ h УПДЕТЦЙФ Ч ЛБЮЕУФЧЕ РЕТЧПЗП УЙНЧПМБ ЪОБЛ g ЙМЙ G , ФП ЕУМЙ ОБКДЕОБ РПУМЕДПЧБФЕМШОПУФШ ХДПЧМЕФЧПТСАЭБС r , ФП ПОБ ЪБНЕОСЕФУС ОБ s . ч РТПФЙЧОПН УМХЮБЕ, УФТПЛБ h ДПМЦОП ВЩФШ ЮЙУМПН, ХЛБЪЩЧБАЭЙН, ЛПФПТБС РП РПТСДЛХ РПУМЕДПЧБФЕМШОПУФШ ХДПЧМЕФЧПТСАЭБС ЧЩТБЦЕОЙА r ДПМЦОБ ВЩФШ ЪБНЕОЕОБ ОБ s . еУМЙ УФТПЛБ t ПРХЭЕОБ, ФП ЧНЕУФП ОЕ© ЙУРПМШЪХЕФУС $0 .

Читайте также:  Поднять локальный сервер windows

ч РТЕДЕМБИ ФЕЛУФБ УФТПЛЙ s НПЦЕФ ВЩФШ ЙУРПМШЪПЧБОЩ ЛПНВЙОБГЙЙ ЧЙДБ \n , ЗДЕ n ЕУФШ ГЕМПЕ ПФ 0 ДП 9 ЧЛМАЮЙФЕМШОП. фБЛПЗП ТПДБ ЛПНВЙОБГЙС РТЙНЕОСЕФУС, ЮФПВЩ ХЛБЪБФШ ФЕЛУФ Ч n-ОЩИ РП РПТСДЛХ УЛПВЛБИ. лПНВЙОБГЙС \0 ПЪОБЮБЕФ РПМОЩК ФЕЛУФ УППФЧЕФУФЧХАЭЙК ТЕЗХМСТОПНХ ЧЩТБЦЕОЙА r , ЛБЛ ЬФП ДЕМБЕФ УЙНЧПМ SPMamp;;.

ч ПФМЙЮЙЕ ПФ sub() Й gsub() ЪДЕУШ НПДЙЖЙГЙТПЧБООБС УФТПЛБ ЧПЪЧТБЭБЕФУС ЛБЛ ТЕЪХМШФБФ ЖХОЛГЙЙ ОЕ ЙЪНЕОСС РТЙ ЬФПН УФТПЛХ t .

gsub( r, s [, t] )
лБЦДХА РПДУФТПЛХ Ч УФТПЛЕ t ХДПЧМЕФЧПТСАЭХА ЧЩТБЦЕОЙА r ЪБНЕОЙФШ ОБ УФТПЛХ s . ч ЛБЮЕУФЧЕ ЪОБЮЕОЙС ЖХОЛГЙЙ ЧПЪЧТБЭБЕФУС ЛПМЙЮЕУФЧП РТПЙЪЧЕД©ООЩИ ЪБНЕО. еУМЙ УФТПЛБ t ПРХЭЕОБ, ФП ЙУРПМШЪХЕФУС $0 . ъОБЛ SPMamp;; (БНРЕТУБОД) Ч ЪБНЕЭБАЭЕН ФЕЛУФЕ ЪБНЕОСЕФУС ОБ ФЕЛУФ ХДПЧМЕФЧПТСАЭЙК ЧЩТБЦЕОЙА r . еУМЙ ЧЩ ИПФЙФЕ ЙУРПМШЪПЧБФШ МЙФЕТБМШОПЕ ЪОБЮЕОЙЕ БНРЕТУБОДБ, ФП УМЕДХЕФ ЙУРПМШЪПЧБФШ \& . рЕТЕД ЙОФЕОУЙЧОЩН ЙУРПМШЪПЧБОЙЕН ЪОБЛБ SPMamp;; (БНРЕТУБОД) РПМЕЪОП РТПЮЕУФШ ТБЪДЕМЩ ПРЙУБОЙС СЪЩЛБ awk ЛБУБАЭЙЕУС ЙУРПМШЪПЧБОЙС УРЕГЙБМШОЩИ ЛПНВЙОБГЙК УЙНЧПМПЧ, ОБЮЙОБАЭЙИУС ПВТБФОПК ЛПУПК ЮЕТФПК ( \ ).

index( s, t )
чЕТОХФШ ЙОДЕЛУ (УНЕЭЕОЙЕ ПФ ОБЮБМБ) УФТПЛЙ t Ч УФТПЛЕ s , ЕУМЙ УФТПЛБ t УПДЕТЦЙФУС Ч УФТПЛЕ s . ч РТПФЙЧОПН УМХЮБЕ ЧЕТОХФШ 0.

length( [s] )
чЕТОХФШ ДМЙОХ УФТПЛЙ s ЙМЙ ДМЙОХ $0 , ЕУМЙ s ПРХЭЕОП.

match( s, r )
чЕТОХФШ РПЪЙГЙА, У ЛПФПТПК ОБЮЙОБЕФУС РПУМЕДПЧБФЕМШОПУФШ ХДПЧМЕФЧПТСАЭБС ТЕЗХМСТОПНХ ЧЩТБЦЕОЙА r ЙМЙ 0, ЕУМЙ ФБЛПК РПУМЕДПЧБФЕМШОПУФЙ ОЕФ, Б ФБЛЦЕ ХУФБОПЧЙФШ РЕТЕНЕООЩЕ RSTART Й RLENGTH .

split( s, a [, r] )
тБЪВЙФШ УФТПЛХ s ОБ ЮБУФЙ, ЛПФПТЩЕ РТЙУЧПЙФШ ЬМЕНЕОФБН НБУУЙЧБ a . тБЪВЙЧБОЙЕ УФТПЛЙ s РТПЙЪЧЕУФЙ Ч УППФЧЕФУФЧЙЙ У ТЕЗХМСТОЩН ЧЩТБЦЕОЙЕН r . еУМЙ r ПРХЭЕОП, ФП Ч ЛБЮЕУФЧЕ ТБЪДЕМЙФЕМС ЙУРПМШЪХЕФУС ЪОБЮЕОЙЕ РЕТЕНЕООПК FS . нБУУЙЧ a ПЮЙЭБЕФУС РЕТЕД ТБЪВЙЧБОЙЕН УФТПЛЙ s .

sub( r, s [, t] )
рПЮФЙ ФП ЦЕ, ЮФП gsub() , ОП ЪБНЕОСЕФУС ФПМШЛП РЕТЧБС РПДИПДСЭБС РПДУФТПЛБ.

substr( s, i [, n] )
чЕТОХФШ РПДУФТПЛХ, ЛПФПТБС ОБЮЙОБЕФУС Ч РПЪЙГЙЙ i УФТПЛЙ s У ДМЙОПК НБЛУЙНХН n УЙНЧПМПЧ. еУМЙ n ПРХЭЕОП, ФП ЧПЪЧТБЭБЕФУС ЮБУФШ s ОБЮЙОБС У РПЪЙГЙЙ i .

tolower( str )
чЕТОХФШ УФТПЛХ str У УЙНЧПМБНЙ РТЕПВТБЪПЧБООЩНЙ Ч УФТПЮОЩЕ ВХЛЧЩ. оЕЙЪПВТБЦБЕНЩЕ УЙНЧПМЩ ЙМЙ ЮЙУМБ ОЕ РТЕПВТБЪХАФУС.

toupper( str )
чЕТОХФШ УФТПЛХ str У УЙНЧПМБНЙ РТЕПВТБЪПЧБООЩНЙ Ч ЪБЗМБЧОЩЕ (РТПРЙУОЩЕ) ВХЛЧЩ.

дМС РПМХЮЕОЙС ЧТЕНЕОЙ РТПЗТБННБ awk ЙНЕЕФ ДЧЕ ЖХОЛГЙЙ: systime()
чПЪЧТБЭБЕФ ФЕЛХЭЕЕ ЧТЕНС Ч УЕЛХОДБИ ОБЮЙОБС У 1 СОЧБТС 1970 ЗПДБ.

strftime( [format [, timestamp] )]
чПЪЧТБЭБЕФ ПФЖПТНБФЙТПЧБООХА ПФНЕФЛХ ЧТЕНЕОЙ ( timestamp ) Ч УППФЧЕФУФЧЙЙ У ЖПТНБФПН format . уФТПЛБ ПФНЕФЛЙ ЧТЕНЕОЙ ДПМЦОБ ЙНЕФШ ЧЙД ЛБЛ РПУМЕ ЖХОЛГЙЙ systime() . еУМЙ УФТПЛБ timestamp ПРХЭЕОБ, ФП ЙУРПМШЪХЕФУС ФЕЛХЭЕЕ ЧТЕНС. еУМЙ УФТПЛБ format ПРХЭЕОБ, ФП ЙУРПМШЪХЕФУС ЖПТНБФ, ЛПФПТЩК РТЙНЕОСЕФУС Ч РТПЗТБННЕ date . дМС РПМХЮЕОЙС УРЙУЛБ ДПРХУФЙНЩИ ЖПТНБФПЧ НПЦОП ПВТБФЙФШУС Л УРЕГЙЖЙЛБГЙЙ ЖХОЛГЙЙ strftime() Ч ANSI C.

ч awk ЙНЕАФУС БТЙЖНЕФЙЮЕУЛЙЕ ЖХОЛГЙЙ. atan2( y, x )
чПЪЧТБЭБЕФ ЪОБЮЕОЙЕ arctan(y/x) Ч ТБДЙБООБИ.

cos( expr )
чПЪЧТБЭБЕФ ЪОБЮЕОЙЕ cos( expr ) Ч ТБДЙБООБИ.

exp( expr )
чПЪЧТБЭБЕФ ЪОБЮЕОЙЕ ЬЛУРПОЕОГЙБМШОПК ЖХОЛГЙЙ.

int( expr )
чПЪЧТБЭБЕФ ГЕМПЕ ПФ expr .

log( expr )
чПЪЧТБЭБЕФ ЪОБЮЕОЙЕ ОБФХТБМШОПЗП МПЗБТЙЖНБ ПФ expr .

rand()
чПЪЧТБЭБЕФ УМХЮБКОПЕ ЪОБЮЕОЙЕ Ч ЙОФЕТЧБМЕ 1.

sin(expr)
чПЪЧТБЭБЕФ ЪОБЮЕОЙЕ sin( expr ) .

sqrt(expr)
чПЪЧТБЭБЕФ ЪОБЮЕОЙЕ sqrt( expr ) (ЛЧБДТБФОЩК ЛПТЕОШ ЙЪ expr ).

srand( [expr] )
хУФБОБЧМЙЧБЕФ ОПЧПЕ ЙУИПДОПЕ ЪОБЮЕОЙЕ ДМС ЗЕОЕТБФПТБ УМХЮБКОЩИ ЮЙУЕМ. чПЪЧТБЭБЕФ РТЕДЩДХЭЕЕ ЙУИПДОПЕ ЪОБЮЕОЙЕ. еУМЙ expr ПРХЭЕОП, ФП ЙУРПМШЪХЕФУС ФЕЛХЭЕЕ ЧТЕНС Ч УЕЛХОДБИ. фБЛЙН ПВТБЪПН, ЕУМЙ ЧЩ ЦЕМБЕФЕ, ЮФПВЩ Х ЧБУ РТЙ ЛБЦДПН ОПЧПН ЪБРХУЛЕ awk , ЗЕОЕТЙТПЧБМБУШ ОПЧБС РУЕЧДПУМХЮБКОБС РПУМЕДПЧБФЕМШОПУФШ Ч ЖХОЛГЙЙ rand() , ФП ЧБН РПМЕЪОП ЧЩЪЧБФШ ЖХОЛГЙА srand() РЕТЕД ГЙЛМПН ПВТБЭЕОЙК Л ЖХОЛГЙЙ rand() .

Читайте также:  Redstone update windows 10 release

Источник

Linux awk длина строки

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

Утилита AWK изначально объединяла свойства утилит UNIX — sed и grep . В дальнейшем ее возможности значительно расширились. Настоящая документация ограничивается описанием возможностей утилиты AWK реализованной для компьютеров CONVEX . Утилита AWK была создана в 1977г, американскими авторами: Alfred V.Aho , Brian W.Kernighan и Peter J.Weinberger . Подробное описание всех возможностей утилиты AWK для UNIX дает их издание: «The AWK Programming Language», 1988.

AWK сканирует input (стандартный или указываемый набор файлов), и над строками, удовлетворяющими заданному образцу, выполняет указываемые действия. Строка может содержать максимально до 256 символов.

awk [-Fc] [-f file] [files]

awk [-Fc] [prog] [files]

prog — программа, вида: ‘ образец $<$действие$>$ ‘

file — файл с AWK-программой:

files — файлы, предназначенные для AWK-обработки.

-Fc — устанавливает разделитель полей в «с» (См. 1.2.1 и 2.4)

2. Образец:

  • Регулярное выражение;
  • Выражение отношения;
  • Комбинация образцов;
  • BEGIN и END .

3. Действие:

  • Последовательность предложений, разделенных « ; » или « \n » (новая строка)

Предложение:

  1. Вывод (Печать);
  2. Присваивание;
  3. Встроенная функция;
  4. Управляющая структура.

На поля можно ссылаться из AWK программы следующим образом:

  1. $1 — Первое поле;
  2. $2 — Второе поле;
  3. . и так далее.
  4. $0 — Ссылается на всю строку целиком.

Строка может содержать максимально до 100 полей.

&lt Drawing or tabular insertion skipped. &gt

x = 1 , x воспринимается как число;

x = » » , x — строка;

x + «abc» — результат операции интерпретируется как число независимо от того, было ли х числом или строкой. Если строка не может быть интерпретирована как число ( «abc» ), то ее значение становится 0.

Строка может содержать максимально до 256 символов.

$1 = «3» + $2 — первое поле принимает значение второго поля, увеличенного на 3.

$(i+1) — интерпретируется как поле, номер которого зависит от значения переменной i .

x[NR] = $0 — элементу массива x , индексированному NR , присваивается обрабатываемая строка.

x[«apple»] — элементы массива могут индексироваться не числовым значением, т.е. строкой.

  • «( )» — Скобки допускаются для группирования;
  • » |» — Указание альтернативы «или»;
  • » + » — Плюс, стоящий за регулярным выражением означает любую последовательность вхождений этого выражения, начиная с 1;
  • » ? » — Знак вопроса за регулярным выражением означает 0 или 1 вхождений этого выражения;
  • [A-Z] — Допускается сокращенная форма записи для рангов ASCII символов;
  • Установленный порядок выполнения операторов на одном скобочном уровне: «[] * + ? конкатенация |» .

/Olga/ — Указывает на строки, содержащие Olga .

/[Oo]lga|[Mm]ike|[Mm]al/ — Указывает на строки, содержащие Olga или olga или Mike или mike или Mal или mal .

/number5/ — Указывает на строки, содержащие number0 или number1 или . number9 .

/\/.+\// — Указывает на строки, содержащие любое количество символов, больше или равное 1, заключенных в / / .

Лог. Операция: &lt , &lt = , == , != , &gt = , &gt .

/[Oo]lga/ — Указывает на строки, первое поле которых содержит Olga или olga .

$1 &gt = «s» — Указывает на строки, начинающиеся с символа s или следующих за ним по порядку: t , u , v .

Последовательности образцов, соединенных одним из знаков читаются слева направо.

Комбинация: «образец1, образец2» указывает, что действие выполняется над строками, попадающими в указанный ранг: то есть, начиная от строки, удовлетворяющей «образец1″ и вплоть до строки, удовлетворяющей «образец2″, включая ее саму.

/\.su/) — Указывает на строки, содержащие 02.95 и не имеющие .su одновременно в первом и во втором поле.

NR == 100, NR == 200 — Указывает строки с номерами от 100 до 200.

Образец BEGIN указывает на начало input или на те действия, которые должны быть выполнены до какого бы то ни было анализа строк. Образец END указывает на конец input или на те действия, которые должны быть выполнены после обработки всех строк.

BEGIN — Устанавливает разделитель полей в «:» до начала обработки строк. Эквивалентно опции «-F:» при AWK вызове.

END < print NR >— Печатает номер последней строки input , т.е. количество обработанных входных строк.

PRINT [&lt список выражений &gt ] [ &gt &lt выражение1 &gt ]

Если в списке выражения находятся через запятую, то значения этих выражений выводятся на output (печатаются) через символ-разделитель OFS (по умолчанию пробел). Если же выражения стоят через пробел, то на печати происходит их конкатенация.

Значение &lt выражения1 &gt рассматривается как имя файла. Само его присутствие означает печать в файл. Если вместо « &gt » стоит « &gt &gt », то это означает добавление к уже существующему файлу. Можно использовать в одной программе максимально до 10 output файлов.

Оператор форматированной печати:

PRINTF формат [ ,список выражений ] [ &gt выражение1 ]

формат: символьная строка в двойных кавычках. Идентичен формату, используемому в функции printf в языке «С». Формат может содержать:

  • обычные символы, они копируются на output .
  • esc последовательности, представляющие неграфические символы, например, «\n» — новая строка.
  • спецификации для вывода аргументов, они следуют после символа « % ». Число спецификаций должно быть равно числу аргументов. (Если оно меньше числа аргументов, то лишние аргументы игнорируются, если же больше — то это ошибка)

&lt переменная &gt = &lt выражение &gt

Начальное значение переменной 0 или « » (пробел). Допускаются другие типы присваивания в соответствии с языком «С»: «+=» , «-=» , «*=» , «/=» , «%=» .

&lt переменная &gt ++ , ++&lt переменная &gt — увеличение значения переменной на 1.

&lt переменная &gt — , —&lt переменная &gt — уменьшение значения переменной на 1.

length(arg) — Функция длины arg . Если arg не указан, то выдает длину текущей строки.

exp(),log(),sqrt() — Математические функции экспонента, логарифм и квадратный корень.

int() — Функция целой части числа.

substr(s,m,n) — Возвращает подстроку строки s , начиная с позиции m , всего n символов.

index(s,t) — Возвращает начальную позицию подстроки t в строке s . (Или 0, если t в s не содержится.)

sprintf(fmt,exp1,exp2. ) — Осуществляет форматированную печать (вывод) в строку, идентично PRINTF .

split(s,array,sep) — Помещает поля строки s в массив array и возвращает число заполненных элементов массива. Если указан sep , то при анализе строки он понимается как разделитель.

if ( &lt условие &gt ) &lt предложение &gt

\hskip 1cm [else &lt предложение &gt ]

while ( &lt условие &gt ) &lt предложение &gt

\hskip 1cm &lt предложение &gt

for(i=1; i&lt =NF; i++) — Аналогично циклу for в языке «С»

for (i in array) — Цикл по элементам массива. Но, элементы массива доступны в этом случае в случайном порядке.

break — Немедленный выход из цикла.

continue — Переход к выполнению следующего предложения.

next — Немедленный переход к анализу следующей строки.

exit — Выход из программы (на конец input).

Источник

Читайте также:  Linux диспетчер задач горячие клавиши
Оцените статью