Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1562|回复: 2
打印 上一主题 下一主题

awk 命令

[复制链接]

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
跳转到指定楼层
楼主
发表于 2018-4-24 16:42:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

语法
awk [选项参数] 'script' var=value file(s)

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

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

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


用法一:
awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号

# 每行按空格或TAB分割,输出文本中的1、4项
$ awk '{print $1,$4}' log.txt

用法二:
awk -F  #-F相当于内置变量FS, 指定分割字符
# 使用","分割
$  awk -F, '{print $1,$2}'   log.txt

用法三:
awk -v  # 设置变量
$ awk -va=1 '{print $1,$1+a}' log.txt

http://www.runoob.com/linux/linux-comm-awk.html

回复

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
沙发
 楼主| 发表于 2018-4-25 11:53:08 | 只看该作者
数组用法
Awk中数组称为关联数组,因为它的下标(索引)可以是数字也可以是字符串。
下标通常称为键,数组元素的键和值存储在Awk程序内部的一个表中,该表采用散列算法,因此数组元素是随机排序。
数组格式:array[index]=value

https://www.cnblogs.com/276815076/p/6410179.html
统计日志中访问最多的10个IP
思路:对第一列进行去重,并输出出现的次数
方法1:$ awk '{a[$1]++}END{for(i in a)print a,i|"sort -k1 -nr|head -n10"}' access.log
方法2:$ awk '{print $1}' access.log |sort |uniq -c |sort -k1 -nr |head -n10
说明:a[$1]++ 创建数组a,以第一列作为下标,使用运算符++作为数组元素,元素初始值为0。处理一个IP时,下标是IP,元素加1,处理第二个IP时,下标是IP,元素加1,如果这个IP已经存在,则元素再加1,也就是这个IP出现了两次,元素结果是2,以此类推。因此可以实现去重,统计出现次数。


回复 支持 反对

使用道具 举报

697

主题

1142

帖子

4086

积分

认证用户组

Rank: 5Rank: 5

积分
4086
板凳
 楼主| 发表于 2018-6-15 13:22:20 | 只看该作者
字符串匹配
判断字符串中是否含有 单引号
  1. BEGIN {
  2.   isNum = 1
  3. }
  4. #运行中
  5. {
  6.     strA=$1
  7.     print $strA
  8.     if(match(strA,/[\']/) != 0) {
  9.     print "OK"
  10.     }
  11. }
  12. #运行后
  13. END {
  14. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-4-24 03:30 , Processed in 0.059306 second(s), 18 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表