Меню сайта
   Главная   
   Обо мне   
   Статьи   
   Дневник   
   Картинки   
   Файлы   
   Форум   
   Гостевая книга   

Категории раздела
Куклы и игрушки [60]
Личное [116]
Музыка [19]
Общее [304]
Японский язык [12]
ZX Spectrum [70]
Субмарины [98]
Настольные игры [34]
Го (碁) [11]
Книги [16]
Япония [26]
Таро [4]
Запертый шкаф [17]
CSA (КША) [15]
GNU/Linux [134]
Ubuntu [103]
Manjaro Linux [39]
Python [3]
Магнитольное [44]
Commodore64 [14]
Игровые приставки [2]


 
Дневник (2020 » Февраль » 18 в 01:57)
GNU/Linux И снова awk

awk
Снова упёрся в проблемы с пониманием работы awk, и наказал себя прочтением и конспектированием статей =) Остаётся надеяться, что чаще стану применять его на практике.


Самое простое применение awk в учебных целях:
awk '{ print }' /etc/passwd
Просто выводит содержимое файла, так же, как cat.

Теперь, когда синтаксис понятен, усложним задачу:
awk -F":" '{ print $1 }' /etc/passwd
где -F":" уазывает разделителем двоеточие ":" а $1 выводит первое поле, встреченное в каждой строке.
Разделителем можно указывать диапазон символов, либо цифры вообще:
awk -F '[0-9]' '{ print $1 }'
awk -F '[[:digit:]]' '{ print $1 }'

Можно выводить несколько полей за раз, но поскольку awk их никак не разделяет выводя слитно, укажем разделитель " ". Это может быть любой символ или последовательность:
awk -F":" '{ print $1 " " $3 }' /etc/passwd

А теперь давайте тоже самое ещё больше усложним, улучшив вывод, но сделал трудночитаемей код:
awk -F":" '{ print "username: " $1 "\t\uid:" $3 }' /etc/passwd
Внимание на двойные ковычки, внутри них просто текст. А \t\ — экранированный слэшами символ табуляции.

Также возможны условия. Вывести поле 6 только если поле 1 равно "root":
awk -F '[:]' '$1 == "root" { print $6 }' /etc/passwd
Awk предлагает полный набор операторов сравнения, в том числе обычные "==", "<", ">", "<=", ">=" и "!=". Кроме того, awk предоставляет операторы "~" и "!~", которые означают "совпадает" и "не совпадает". Повторим предыдущий пример используя ~ :
awk -F '[:]' '$1 ~ /roo/ { print $6 }' /etc/passwd
Как заметили, его прелесть в том, что можно указывать только часть имени поля.

Используем булевы условные операторы логическое ИЛИ "||"  и логическое И "&&".
awk -F '[:]' '$1 ~ /t/ && $2 == "x" { print $7 }' /etc/passwd
Команда выведёт поле 7 только если поле 1 СОДЕРЖИТ "t" И поле 2 РАВНО "x".

Regular Expression
Кстати, если вы заметили, то между // размещаются регулярные выражения.
Например это /[Aa]uto/ требует наличия одной из букв в [...]  и слова uto.
Или такой пример: выводится только та строка, где в её начале есть Linux:
echo -e "Linux rulez\nWindows must die" | awk '/^Linux/'

Регистронезависимый поиск функцией tolower():
echo -e "sysop SysOp SYSOP" | awk 'tolower($0) ~ /^sys/'

Вывод сообщения о пустом поле:
echo -e "num 1\nnum 2\nnum " | awk '{ if ($2 == "") print "Number lost at line " NR }'


Ссылки:
  1. Даниэль Роббинс. Часть 1. Awk в примерах
    https://www.ibm.com/developerworks/ru/library/l-awk1/index.html#h4
  2. 20 awk examples
    https://linuxhint.com/20_awk_examples/

Категория: GNU/Linux | Просмотров: 344 | Добавил: harushima | Рейтинг: 0.0/0 |
Всего комментариев: 1.

16.05.2022 01:18
1 harushima
0  
Стереть из файла строки, начинающиеся с этого IP:
sed -i.back 's/^192.168.1.33.*//' ~/.ssh/known_hosts

В целях защиты от спама, добавлять комментарии могут только зарегистрированные пользователи. Если Вы не хотите регистрироваться под своим именем, войдите под логином: anonymous, паролем: anonymous.   ( Регистрация,   Вход).
Авторизация
Анонимный вход:
anonymous / anonymous
Логин:
Пароль:

Календарь
«  Февраль 2020  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
242526272829

Поиск

Облако тэгов
JGSDF игрушки Брюнетки Кладбище сайты Ярость Дракулы Древний Египет девушки кошки Cthulhu Вампиры Kitsune Ужас Аркхема инструмент комиксы Lovecraft готика Submarine submarine rc toy Hosting игротека Ужас Аркхэма book uboat мобильная связь го Edgar Poe swf Mansions of Madness Nightmares персоны Synergy linux-hardware bash youtube Storages Python Мастер-рукожоп Магнитофоны Entropy Grub2 loglevel WiFi Beeline ОПСОСЫ sharp939 Аудиокассеты Windows linuxwork Хочуны ImageMagick топБарыг C64c Commodore

Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Page QR code


Перепечатка материалов сайта без активной ссылки запрещена. Следить за RSS
(c) hermitlair.ucoz.com 2009-2024
Лучший браузер!
Блокировка рекламы