
В этой части нашего Серия команд Linux Awk, мы рассмотрим одну из самых важных особенностей Awk, то есть редактирование поля.
Приятно знать, что Awk автоматически разделяет предоставленные ему входные строки на поля, и поле может быть определено как набор символов, которые отделены от других полей внутренним разделителем полей.
Если вы знакомы с Unix / Linux или делаете программирование оболочки bash, то вы должны знать, какой внутренний разделитель полей (IFS) переменная. IFS по умолчанию в Awk - это табуляция и пробел.
Вот как работает идея разделения полей в Awk: когда он встречает строку ввода, в соответствии с определенным IFS, первым набором символов является первое поле, доступ к которому осуществляется с помощью $1, второй набор символов - это поле два, доступ к которому осуществляется с помощью $2, третий набор символов - это третье поле, доступ к которому осуществляется с помощью $3 и так далее до последнего набора символов.
Чтобы лучше понять это редактирование поля Awk, давайте взглянем на примеры ниже:
Пример 1: Я создал текстовый файл с названием tecmintinfo.txt.
# vi tecmintinfo.txt. # кот tecmintinfo.txt.
Затем из командной строки я пытаюсь распечатать первый, второй и в третьих поля из файла tecmintinfo.txt используя команду ниже:
$ awk '// {напечатайте $ 1 $ 2 $ 3}' tecmintinfo.txt TecMint.com - это
Из выходных данных выше видно, что символы из первых трех полей печатаются на основе IFS определено, что является пробелом:
$1
.$2
.$3
.Если вы заметили в распечатанном виде, значения полей не разделены, и именно так работает печать по умолчанию.
Чтобы четко видеть вывод с пробелом между значениями полей, вам нужно добавить (,)
оператор следующим образом:
$ awk '// {выводим $ 1, $ 2, $ 3; } 'tecmintinfo.txt TecMint.com - это платформа.
Следует отметить и всегда помнить одну важную вещь: использование ($)
в Awk отличается от использования в сценариях оболочки.
Под сценарием оболочки ($)
используется для доступа к значениям переменных в то время как в Awk($)
он используется только при доступе к содержимому поля, но не для доступа к значениям переменных.
Пример 2: Давайте посмотрим на еще один пример, используя файл, который содержит несколько строк с именем my_shoping.list.
Нет Item_Name Unit_Price Количество Цена. 1 Мышь № 20 000 1 № 20 000. 2 Монитор № 500 000 1 № 500 000. 3 RAM_Chips # 150,000 2 # 300,000. 4 Ethernet_Cables # 30,000 4 # 120,000
Скажем, вы хотели только распечатать Цена за единицу
для каждого элемента в списке покупок, вам нужно будет выполнить следующую команду:
$ awk '// {распечатать $ 2, $ 3}' my_shopping.txt Item_Name Unit_Price. Мышь №20,000. Монитор №500000. RAM_Chip # 150,000. Ethernet_Cables № 30,000.
Awk также есть printf
Команда, которая помогает вам отформатировать ваш вывод, является хорошим способом, поскольку вы можете видеть, что вышеприведенный вывод недостаточно ясен.
С использованием printf
для форматирования вывода Название предмета и Цена за единицу:
$ awk '// {printf "% -10s% s \ n", $ 2, $ 3}' my_shopping.txt Item_Name Unit_Price. Мышь №20,000. Монитор №500000. RAM_Chip # 150,000. Ethernet_Cables № 30,000.
Редактирование поля очень важно при использовании Awk для фильтрации текста или строк он помогает получить определенные данные в столбцах списка. И всегда помните, что использование ($)
оператор в Awk отличается от сценариев оболочки.
Я надеюсь, что статья была для вас полезной, и для получения дополнительной информации или вопросов вы можете оставить комментарий в разделе комментариев.