(7) команда AWK (Linux Command еженедельных серий)

Краткое введение

AWK является мощным инструментом анализа текста, особенно при работе с относительно хорошим форматом файла журнала, AWK, чтобы положить его просто читает файл строка за строкой, с пространством для разделителей по умолчанию (Вы можете также указать разделители) Каждый обработка линии среза.

грамматика

awk [选项参数] 'script' var=value file(s)
awk [选项参数] -f scriptfile var=value file(s)

AWK рабочий

AWK рабочий процесс таков, что: чтение есть запись новой строки разделенных «\ п», а затем записывается в указанный разделитель полей в области, заполнить поле, $ 0 указывает на все домены в полной записи (это и регулярное совпадает аналогичный), $ 1 представляет собой первое поле, $ п обозначает п-е поля. Сепаратор поля по умолчанию является пространством, конечно, может быть указан разделитель.

Параметры Параметр Описание:

-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。

-f scripfile or --file scriptfile
从脚本文件中读取awk命令

-v var=value or --asign var=value
赋值一个用户定义变量。

Аналитический: -F указанный лист сепаратора толстой кишки каждая строка, выход первого среза и предпоследних промежуточных фрагментов, разделенных запятыми

 
 //假设我们要输出supervisor这个程序的进程号 ,这个命令配合xargs可以方便于结束某些进程
 ps -ef|grep 'supervisor'|awk '{print $2}'
 //输出
 1630
 
 
 比如有如下文件ip.txt

1  134.102.173.43

2  134.102.173.43

3  134.102.171.42

4  134.102.170.9

要统计出现次数最多的IP可以利用以下shell脚本:

cat ip.txt | awk '{print $2}' | sort | uniq -c | sort -n -r | head -n 1

最后如果不加head这一组可以统计从多到少的列表

Разрешение:

AWK '{печать $ 5}': Низкий домен 5 доступа к данным (колонка 5)

сортировать: IP часть рода.

уник -c: печать количество каждого повторяющихся строк появляются. (И удалить дубликаты строк)

сортировать -n -r: расположены в порядке появления повторяющихся строк по убыванию.

головка -n 5: Возьмите пятерку IP

Встроенные переменные


ARGC               命令行参数个数
ARGV               命令行参数排列
ENVIRON            支持队列中系统环境变量的使用
FILENAME           awk浏览的文件名
FNR                浏览文件的记录数
FS                 设置输入域分隔符,等价于命令行 -F选项
NF                 浏览的当前行中分片的个数
NR                 已读的记录数
OFS                输出域分隔符
ORS                输出记录分隔符
RS                 控制记录分隔符

Используется NF, если {печать $ (NF-1)} является предпоследним фрагмент печати

Далее, в качестве примера, мы сохраняем / и т.д. / пароль файл в demo.txt.

root:x:0:0:root:/root:/usr/bin/zsh
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync

Пример:
`` `

$ AWK -F ':' '{печать $ 1, $ (NF-1)}' demo.txt


## 函数
awk还提供了一些内置函数,方便对原始数据的处理。

ToUpper (): для символов в верхний регистр.
TOLOWER (): символы нижнего регистра.
длина (): возвращает длину строки.
зиЬзЬг (): возвращает подстроку.
грех (): синусоидальной.
сов (): косинус.
SQRT (): квадратный корень.
Rand (): случайное число.


示例:

$ AWK -F ':' '{печать ToUpper ($ 1)}' demo.txt


## 条件表达式
awk允许指定输出条件,只输出符合条件的行。

Только выход из строки, содержащей USR.

$ AWK -F ':' '/ USR / {печать $ 1}' demo.txt

Выход Одд линия

$ AWK -F ':' 'NR% 2 == 1 {печать $ 1}' demo.txt
корень
бен
синхронизации

Выход третьего ряда после ряда

$ AWK -F ':' 'NR> 3 {печать $ 1}' demo.txt
SYS
синхронизации

Следующий пример выходного значения равна указанному первой строке поля

$ AWK -F ':' '$ 1 == "корень" {печать $ 1}' demo.txt
корень

$ AWK -F ':' «$ 1 == "корень" || $ 1 == "бин" {печать $ 1}»demo.txt
корень
бен


## if 语句
awk提供了if结构,用于编写复杂的条件,if结构还可以指定else部分

Выход первого поля первого символа строки больше т.

$ AWK -F ':' '{если ($ 1> "м") печать $ 1}' demo.txt
корень
SYS
синхронизации

Она включает в себя то еще

$ AWK -F ':' «{если ($ 1> "м") печать $ 1; еще печать "---"}»demo.txt
корень
---
---
SYS
синхронизации

`` `

Некоторые примеры этой статьи исходит от учителя Его Xuefeng статьи

рекомендация

отwww.cnblogs.com/vinter/p/10926598.html
рекомендация