- Использование awk для получения только чисел из строки
- 5 ответов
- Команда AWK в Linux с примерами
- Как работает awk
- Записи и поля
- Программа awk
- Выполнение программ awk
- Шаблоны AWK
- Шаблоны регулярных выражений
- Шаблоны реляционных выражений
- Шаблоны диапазонов
- Специальные шаблоны выражения
- Комбинирование узоров
- Встроенные переменные
- Изменение поля и разделителя записей
- Действия при отсутствии нагрузки
- Использование переменных оболочки в программах AWK
- Выводы
- Русские Блоги
- Используйте awk для извлечения цифр или букв в строке
- Интеллектуальная рекомендация
- Жареная монета робота: будда жареная монета
- Подробная интерпретация статьи Mesos и архитектуры системы управления ресурсами и планирования задач
- [База данных] Основы базы данных SQL Server 2012 — Сообщение о параллельном управлении — эксперимент
Использование awk для получения только чисел из строки
Справочная информация:
У меня есть столбец, который должен получать данные, вводимые пользователем в виде «Текст описания ref12345678». У меня есть сценарии, которые захватывают ссылочный номер, но, к сожалению, некоторые пользователи добавляют его неправильно, поэтому вместо «ref12345678» это может быть «ref 12345678» , «RF12345678» , «abcd12345678» или любой другой вариант. Естественно, неправильное форматирование нарушает работу некоторых запущенных скриптов. На данный момент я не могу контролировать ввод данных пользователем в это поле, поэтому я хочу создать сценарии позже в конвейере, просто чтобы получить номер.
На данный момент я удаляю буквы с помощью awk ‘
Вопрос в том, есть ли способ настроить awk для печати только чисел из строки или установки разделителей для числовых элементов в строке? (или действительно ли замена — самое эффективное решение этой проблемы).
Итак, вкратце: как мне использовать awk для $ echo «ref12345678» , чтобы вывести только «12345678» без подстановки?
5 ответов
Если awk не , необходимо:
С awk для вашего примера:
Grep отлично работает:
Используйте расширенное регулярное выражение.
Возвращать только совпадения, а не контекст
Соответствуют номерам, которые определены как:
Необязательный ведущий знак
Одно или несколько чисел
Необязательная точка, за которой следует одно или несколько чисел.
Удобно помещать вывод в массив
А затем используйте это так
Другой вариант (при условии, что GNU awk ) включает указание нечислового регулярного выражения в качестве разделителя.
В AWK вы можете указать несколько условий , например:
Будет отображать только цифры без алфавита и знаков препинания. с !
означает не содержать .
Вы также можете попробовать следующее с awk, предполагая, что в строке будет только одно число:
Это преобразует всю вашу строку в числовую, и при реализации awk останутся только значения, соответствующие числовому описанию. Так например:
Источник
Команда AWK в Linux с примерами
Awk — это язык сценариев общего назначения, предназначенный для расширенной обработки текста. В основном он используется как инструмент отчетности и анализа.
В отличие от большинства других процедурных языков программирования, awk управляется данными, что означает, что вы определяете набор действий, выполняемых с вводимым текстом. Он принимает входные данные, преобразует их и отправляет результат на стандартный вывод.
В этой статье рассматриваются основы языка программирования awk. Знание основ awk значительно улучшит вашу способность манипулировать текстовыми файлами в командной строке.
Как работает awk
Существует несколько различных реализаций awk. Мы будем использовать GNU-реализацию awk, которая называется gawk. В большинстве систем Linux интерпретатор awk — это просто символическая ссылка на gawk .
Записи и поля
Awk может обрабатывать текстовые файлы данных и потоки. Входные данные разделены на записи и поля. Awk работает с одной записью за раз, пока не будет достигнут конец ввода. Записи разделяются символом, который называется разделителем записей. Разделителем записей по умолчанию является символ новой строки, что означает, что каждая строка в текстовых данных является записью. Новый разделитель записей может быть установлен с помощью переменной RS .
Записи состоят из полей, разделенных разделителем полей. По умолчанию поля разделяются пробелом, включая один или несколько символов табуляции, пробела и новой строки.
Поля в каждой записи обозначаются знаком доллара ( $ ), за которым следует номер поля, начинающийся с 1. Первое поле представлено с помощью $1 , второе — с помощью $2 и так далее. На последнее поле также можно ссылаться с помощью специальной переменной $NF . На всю запись можно ссылаться с помощью $0 .
Вот визуальное представление, показывающее, как ссылаться на записи и поля:
Программа awk
Чтобы обработать текст с помощью awk , вы пишете программу, которая сообщает команде, что делать. Программа состоит из ряда правил и пользовательских функций. Каждое правило содержит одну пару шаблон и действие. Правила разделяются новой строкой или точкой с запятой ( ; ). Обычно awk-программа выглядит так:
Когда awk обрабатывает данные, если шаблон соответствует записи, он выполняет указанное действие с этой записью. Если у правила нет шаблона, все записи (строки) совпадают.
Действие awk заключено в фигурные скобки ( <> ) и состоит из операторов. Каждый оператор определяет операцию, которую нужно выполнить. В действии может быть несколько операторов, разделенных новой строкой или точкой с запятой ( ; ). Если правило не имеет действия, по умолчанию выполняется печать всей записи.
Awk поддерживает различные типы операторов, включая выражения, условные операторы, операторы ввода, вывода и т. Д. Наиболее распространенные операторы awk:
- exit — останавливает выполнение всей программы и выходит.
- next — останавливает обработку текущей записи и переходит к следующей записи во входных данных.
- print — Печать записей, полей, переменных и настраиваемого текста.
- printf — дает вам больше контроля над форматом вывода, аналогично C и bash printf .
При написании программ awk все, что находится после решетки (#) и до конца строки, считается комментарием. Длинные строки можно разбить на несколько строк с помощью символа продолжения, обратной косой черты ( ).
Выполнение программ awk
Программа awk может быть запущена несколькими способами. Если программа короткая и простая, ее можно передать непосредственно интерпретатору awk из командной строки:
При запуске программы в командной строке ее следует заключать в одинарные кавычки ( » ), чтобы оболочка не интерпретировала программу.
Если программа большая и сложная, лучше всего поместить ее в файл и использовать параметр -f для передачи файла команде awk :
В приведенных ниже примерах мы будем использовать файл с именем «team.txt», который выглядит примерно так:
Шаблоны AWK
Шаблоны в awk определяют, следует ли выполнять соответствующее действие.
Awk поддерживает различные типы шаблонов, включая регулярное выражение, выражение отношения, диапазон и шаблоны специальных выражений.
Если у правила нет шаблона, сопоставляется каждая входная запись. Вот пример правила, содержащего только действие:
Программа распечатает третье поле каждой записи:
Шаблоны регулярных выражений
Регулярное выражение или регулярное выражение — это шаблон, который соответствует набору строк. Шаблоны регулярных выражений AWK заключаются в косую черту ( // ):
Самый простой пример — это буквальное сопоставление символа или строки. Например, чтобы отобразить первое поле каждой записи, содержащее «0,5», вы должны выполнить следующую команду:
Шаблон может быть любым типом расширенного регулярного выражения. Вот пример, который печатает первое поле, если запись начинается с двух или более цифр:
Шаблоны реляционных выражений
Шаблоны реляционных выражений обычно используются для сопоставления содержимого определенного поля или переменной.
По умолчанию шаблоны регулярных выражений сопоставляются с записями. Чтобы сопоставить регулярное выражение с полем, укажите поле и используйте оператор сравнения «содержать» (
Например, чтобы напечатать первое поле каждой записи, второе поле которой содержит «ia», вы должны ввести:
Чтобы сопоставить поля, которые не содержат заданного шаблона, используйте оператор !
Вы можете сравнивать строки или числа для таких отношений, как, больше, меньше, равно и т. Д. Следующая команда печатает первое поле всех записей, третье поле которых больше 50:
Шаблоны диапазонов
Шаблоны диапазонов состоят из двух шаблонов, разделенных запятой:
Все записи, начинающиеся с записи, соответствующей первому шаблону, до совпадения с записью, соответствующей второму шаблону.
Вот пример, который напечатает первое поле всех записей, начиная с записи, включая «Raptors», до записи, включающей «Celtics»:
Шаблоны также могут быть выражениями отношений. Приведенная ниже команда распечатает все записи, начиная с той, четвертое поле которой равно 32, до той, четвертое поле которой равно 33:
Шаблоны диапазона нельзя комбинировать с другими выражениями шаблона.
Специальные шаблоны выражения
Awk включает следующие специальные паттерны:
- BEGIN — используется для выполнения действий перед обработкой записей.
- END — используется для выполнения действий после обработки записей.
Шаблон BEGIN обычно используется для установки переменных, а шаблон END для обработки данных из записей, таких как вычисления.
В следующем примере печатается «Начать обработку.», Затем печатается третье поле каждой записи и, наконец, «Завершить обработку».
Если программа имеет только шаблон BEGIN , действия выполняются, а ввод не обрабатывается. Если в программе есть только шаблон END , ввод обрабатывается перед выполнением действий правила.
Версия awk для Gnu также включает еще два специальных шаблона BEGINFILE и ENDFILE , которые позволяют выполнять действия при обработке файлов.
Комбинирование узоров
Awk позволяет комбинировать два или более шаблонов, используя логический оператор И ( && ) и логический оператор ИЛИ ( || ).
Вот пример, в котором оператор && используется для печати первого поля той записи, у которой третье поле больше 50, а четвертое поле меньше 30:
Встроенные переменные
Awk имеет ряд встроенных переменных, которые содержат полезную информацию и позволяют управлять обработкой программы. Ниже приведены некоторые из наиболее распространенных встроенных переменных:
- NF — количество полей в записи.
- NR — номер текущей записи.
- FILENAME — имя входного файла, который в данный момент обрабатывается.
- FS — Разделитель полей.
- RS — Разделитель записей.
- OFS — Разделитель выходных полей.
- ORS — разделитель выходной записи.
Вот пример, показывающий, как напечатать имя файла и количество строк (записей):
Переменные в AWK могут быть установлены в любой строке программы. Чтобы определить переменную для всей программы, поместите ее в шаблон BEGIN .
Изменение поля и разделителя записей
По умолчанию значение разделителя полей — любое количество пробелов или символов табуляции. Его можно изменить, установив в переменной FS .
Например, чтобы установить разделитель полей . вы бы использовали:
Разделитель полей также может содержать более одного символа:
При запуске однострочных команд awk в командной строке вы также можете использовать параметр -F для изменения разделителя полей:
По умолчанию разделителем записей является символ новой строки, который можно изменить с помощью переменной RS .
Вот пример, показывающий, как изменить разделитель записей на . :
Действия при отсутствии нагрузки
Действия awk заключаются в фигурные скобки ( <> ) и выполняются при совпадении с шаблоном. Действие может иметь ноль или более утверждений. Несколько операторов выполняются в том порядке, в котором они появляются, и должны быть разделены новой строкой или точкой с запятой ( ; ).
В awk поддерживается несколько типов операторов действий:
- Выражения, такие как присваивание переменных, арифметические операторы, операторы увеличения и уменьшения.
- Управляющие операторы, используемые для управления потоком программы ( if , for , while , switch и т. Д.)
- Операторы вывода, такие как print и printf .
- Составные утверждения, чтобы сгруппировать другие утверждения.
- Операторы ввода, чтобы управлять обработкой ввода.
- Операторы удаления для удаления элементов массива.
Оператор print вероятно, является наиболее часто используемым оператором awk. Он печатает форматированный вывод текста, записей, полей и переменных.
При печати нескольких элементов их нужно разделять запятыми. Вот пример:
Печатные материалы разделяются одиночными пробелами:
Если вы не используете запятые, между элементами не будет пробелов:
Печатные элементы объединены:
Когда print используется без аргументов, по умолчанию используется print $0 . Текущая запись будет напечатана.
Чтобы напечатать собственный текст, вы должны заключить текст в двойные кавычки:
Вы также можете печатать специальные символы, такие как новая строка:
Оператор printf дает вам больше контроля над форматом вывода. Вот пример вставки номеров строк:
printf не создает новую строку после каждой записи, поэтому мы используем n :
Следующая команда вычисляет сумму значений, хранящихся в третьем поле в каждой строке:
Вот еще один пример, показывающий, как использовать выражения и управляющие операторы для печати квадратов чисел от 1 до 5:
Однострочные команды, подобные приведенной выше, труднее понять и поддерживать. При написании более длинных программ следует создать отдельный программный файл:
Запустите программу, передав имя файла интерпретатору awk :
Вы также можете запустить программу awk как исполняемый файл, используя директиву shebang и установив интерпретатор awk :
Теперь вы можете запустить программу, введя:
Использование переменных оболочки в программах AWK
Если вы используете команду awk в сценариях оболочки, велика вероятность, что вам потребуется передать переменную оболочки программе awk. Один из вариантов — заключить программу в двойные вместо одинарных кавычек и подставить переменную в программе. Однако эта опция сделает вашу awk-программу более сложной, так как вам нужно будет избежать переменных awk.
Рекомендуемый способ использования переменных оболочки в программах awk — присвоить переменную оболочки переменной awk. Вот пример:
Выводы
Awk — один из самых мощных инструментов для работы с текстом.
Эта статья едва затрагивает поверхность языка программирования awk. Чтобы узнать больше об awk, ознакомьтесь с официальной документацией Gawk .
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Источник
Русские Блоги
Используйте awk для извлечения цифр или букв в строке
1. Извлеките числа в строке
2. Извлеките строчные буквы из строки.
3. Извлеките заглавные буквы в строку.
4. Извлеките буквы в строке (без учета регистра).
Метод 1:
5. Извлеките нечисловые символы в строку.
6. Извлеките символы, кроме цифр и букв, в строку.
Интеллектуальная рекомендация
Жареная монета робота: будда жареная монета
Генеральный директор Hammer Technology Luo Yonghao сегодня сказал в Weibo. «Накануне революции платформы, вы не волнуетесь, застраховатеть весь день, я не заработал, сколько денег, и у меня не б.
Подробная интерпретация статьи Mesos и архитектуры системы управления ресурсами и планирования задач
0. Предисловие Для получения справочной информации, истории разработки и некоторых базовых знаний о системе управления ресурсами и планирования задач, пожалуйста, обратитесь к блогу.Сводка по системе .
[База данных] Основы базы данных SQL Server 2012 — Сообщение о параллельном управлении — эксперимент
Это экспериментальный отчет о первом семестре «База данных базы данных», в общей сложности 15 экспериментов, в топ-12 библиотеке Baidu, после трех онлайн, я не могу найти его, я провел мно.
Источник