一、awk的内置参数

$0:表示整个当前行

$1:每行第一个字段

$2:每行第二个字段

$n:每行第n个字段

awk的参数:分隔符

  -F separator 设定分隔符(默认为空格)  

打印单个字段:

awk -F ':' '{print $3}'   /etc/passwd

打印多个字段:

awk -F ':' '{print $1,$3}'  /etc/passwd

awk -F ':' '{printf("User:%s      UID:%s\n", $1,$3)}'  /etc/passwd

awk -F ':' '{print "User:" $1 "\t"UID:"$3"}'  /etc/passwd

  NR:每行行号

  NF:字段数量

awk -F ':' '{print NR,NF,FILENAME}' /ect/passwd

#案例:

1、显示/etc/passwd 中用户名ID大于100的行号和用户名

awk -F ":" '{if ($3>100) print NR,$1}' /etc/passwd

awk -F ":" '$3>100{print NR,$1}' /etc/passwd

2、在服务器的日志中找出IP:43.226.164.120 的访问日期。

sed -n '/43.226.164.120/p' assess_log | awk ' ' '{print substr($4,2)}'

awk '/43.226.164.120/{print substr($4,2)}' assess_log

二、awk的逻辑判断式:

  • ~     匹配正则表达式
  • !~ 不匹配正则表达式
  • ==等于
  • !=不等于
  • < 小于
  • >大于

awk -F ':' '$1~/^m.*{print $1}' /etc/passwd   打印以m开头的用户名

awk -F ':' '$1!~/^m.*{print $1}' /etc/passwd  不打印以m开头的用户名

三、awk的扩展格式

command扩展

BEGIN{print "start"}pattern{awk命令}END{print "end"}

#案例:制表显示/etc/passwd 每行的行号,每行的列数,对应行的用户名

awk -F ':' 'BEGIN {"User     Line    Col"}{print $1,NR,NF}END{print  "-------------"FILENAME"-------------"}'  /etc/passwd

#案例:统计当前文件夹下的文件/文件夹占用的大小

ls -al | awk 'BEGIN{count=0}{count+=$5}END{print count}'

ls -al | awk 'BEGIN{count=0}{count+=$5}END{print count/1024/1024"M"}'

#统计显示/etc/passwd的账户总人数

awk -F ':'  'BEGIN{count=0}{count++}END{print count}' /etc/passwd

awk -F ':'  'BEGIN{count=0}$1!~/^$/{count++}END{print count}' /etc/passwd 排除空行

#统计显示/etc/passwd中UID中大于100的用户名

awk -F ':'  '$3>100{print $1}'  /etc/passwd

awk -F ':' 'BEGIN{count=0}$3>100{user[count++]=$1}END{for(i=0;i<count;i++) print i,user[i]}'  /etc/passwd

#统计access_log日志中每个IP出现的次数

awk '{arr[$1]++}END{for(key in arr)print key,arr[key]}'  access_log

awk和sed对比

1、awk和sed都可以处理文本

2、awk侧重于复杂逻辑处理

3、sed侧重于正则处理

4、awk和sed可以共同使用

面试问题

1、修改某个目录下所有包含AAA的文件的文件名  改为 aaa【改文件名】

find . -name "*aaa*"  -exec rename aaa AAA  { } \;

2、修改目录下所有的文件中,包含 aaa 都改成 AAA【改文件内容】

sed -i  's/AAA/aaa/g' `grep AAA -rl . `  反引号

sed本身不改变文件内容,要使用-i,然后看下文件

linux之awk命令的更多相关文章

  1. linux中awk命令(最全面秒懂)

    目录 一:linux中awk命令 1.awk命令简介 2.awk作用 3.awk的语法格式 4.解析awk使用方法 5.参数 6.awk的生命周期 二:awk中的预定义变量 三:awk运行处理规则的执 ...

  2. linux中awk命令详解(最全面秒懂)

    一:linux中awk命令 1.awk命令简介 AWK 是一种处理文本文件的语言,是一个强大的文本分析工具. 之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinber ...

  3. linux的awk命令解读

    转自:http://blog.csdn.net/guoer9973/article/details/44650729 awk是行处理器: 相比较屏幕处理的优点,在处理庞大文件时不会出现内存溢出或是处理 ...

  4. linux 常用awk命令

    linux awk命令详解awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每 ...

  5. Linux系统——awk命令

    awk命令不仅仅是Linux系统的命令,也是一种编程语言,用来处理数据和生成报告(Exel),处理的数据可以是一个或多个文件(标准输入和管道获取标准输入).可在命令行上编辑操作,也可以写成awk程序运 ...

  6. Linux的awk命令

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  7. Linux之awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  8. linux下awk命令详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  9. Linux学习awk命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各 ...

  10. linux之awk命令获取最后一列

    统计分析中经常用的awk命令,其中用的最多的还是切分 cat  test | awk -F',' '{print $1,$2} 能够很好的将记录按照需要切分开, 但是如何获取最后一列呢? 可以使用aw ...

随机推荐

  1. JAVA RTTI

    基础类可接收我们发给派生类的任何消息,因为两者拥有完全一致的接口.我们要做的全部事情就是从派生上溯造型,而且永远不需要回过头来检查对象的准确类型是什么.所有细节都已通过多态性获得了完美的控制. 但经过 ...

  2. JAVA线程同步 (三)信号量

    一个信号量有且仅有3种操作,且它们全部是原子的:初始化.增加和减少 增加可以为一个进程解除阻塞: 减少可以让一个进程进入阻塞. 信号量维护一个许可集,若有必要,会在获得许可之前阻塞每一个线程:     ...

  3. 任务30:RoutingMiddleware介绍以及MVC引入

    任务30:RoutingMiddleware介绍以及MVC引入 前面讲到app.Map的方式,它也可以实现路由 当我们的url是task的时候,就会执行里面的context的输出内容 app.Map( ...

  4. E20180426-hm

    transition   n. 过渡,转变,变迁; [语] 转换; [乐] 变调 flip  vt.  按(开关); 快速翻转; 急挥; n. 空翻; 浏览; (射击时枪管的) 跳跃; 轻抛; win ...

  5. E20180420-hm

    prior adj. 优先的; 占先的; 在…之前 alignment n. 结盟; 队列,排成直线; 校直,调整; [工] 准线; align  vt. 使成一线,使结盟; 排整齐    vi. 排 ...

  6. merge和rebase

    git里面对于分支的合并处理其实有两种.合并与分基. 对于合并,非常简单.git merge [branch-name] 表示把目标分支合并进当前所在分支   至于分基,简单地讲就是换根.具体细节就不 ...

  7. Android Fragment使用小结及介绍

    目录(?)[-] 一什么是Fragment 二Fragment的生命周期 三Fragment的两种添加方式addreplace 四两种添加方式性能比较 偶记得第一次接触Fragment,觉得好牛叉的组 ...

  8. HDOJ4857【拓扑排序】

    首先 CLJ ORZ 这道题做了两次,第一次瞎搞... 第二次,好吧,骄傲地说水过... 题意:不说了: 思路: 题目默认是小的在前面,那么就是反向建图,每次排序拿大的出来: 第一次做的时候,我记得我 ...

  9. bzoj 3667: Rabin-Miller算法【Miller-Rabin】

    Miller-Rabin模板 #include<iostream> #include<cstdio> #include<algorithm> using names ...

  10. 一道简单的 Java 笔试题,但值得很多人反思!

    前言 面试别人,对我来说是一件新奇事,以前都是别人面试我.我清楚地知道,我在的地域与公司,难以吸引到中国的一流软件人才.所以,我特地调低了期望,很少问什么深入的技术问题,只问一些广泛的.基础的.我只要 ...