zoukankan      html  css  js  c++  java
  • [Linux] awk命令详解

    awk用于格式化报文或者从文件中抽取数据包.
      1.$awk '{print $0}' gefforey.txt | tee gefforey.doc
    该命令将在屏幕输出gefforey.txt文件内容并将其内容复制到gefforey.doc文件中.
      2.$awk -F: '{print $1}' gefforey.log
    该命令以:为单位读取gefforey.log文件中第一列内容.
      3.$awk 'BEGIN {print "Name   Belt ------------"} {print $1" "$3}' gefforey.txt
    该 命令将在屏幕首先输出"Name   Belt",第二行输出"------------",并在输出文件内容的时候,每列之间间隔一个TAB位.可以在print语句之后加上END {print "end of output"},那么将会在文件内容输出结束的时候打印"end of output".
           4.$awk '$2 ~ /^baidu$/ {print $0}' gefforey.txt
    该命令显示gefforey.txt文件中以空格分隔的第二列字符串是"baidu"的所有行.
      5.$awk '{if($2 ~ /^baidu$/) print $0}' gefforey.txt
    该命令判断如果某行第二列字符串为"baidu",则打印出该行.
           6.$awk '{if($2 < $3) print $0}' gefforey.txt
    该命令显示判断如果某行第二列值小于第三列值,则打印该行.awk的条件操作符有:
    < 小于,> = 大于等于,< = 小于等于,~ 匹配正则表达式,= = 等于,!~ 不匹配正则表达式,!= 不等于
      7.$awk '{if($2 =="google1" && $3=="google2") print $0}' gefforey.txt
    该命令判断如果某行第二列值为"google1"并且第三列值为"google2",则打印出该行.awk的逻辑表达式有:&& AND,|| O R,! 非.
      8.$awk '{print NF,NR,$0} END{print FILENAME}' gefforey.txt
    该命令会输出浏览记录的域个数和已读的记录数,并在输出结尾打印文件名.awk内置的变量有:
    A R G C 命令行参数个数
    A R G V 命令行参数排列
    E N V I R O N 支持队列中系统环境变量的使用
    FILENAME a w k浏览的文件名
    F N R 浏览文件的记录数
    F S 设置输入域分隔符,等价于命令行- F选项
    N F 浏览记录的域个数
    N R 已读的记录数
    O F S 输出域分隔符
    O R S 输出记录分隔符
    R S 控制记录分隔符
    (附:1.N F的一个强大功能是将变量$ P W D的返回值传入a w k并显示其目录。这里需要指定域分隔
    符/.命令为:echo $PWD | awk -F/ '{print $NF}';
               2.显示文件名,命令为:echo "/usr/local/etc/rc.sybase" | awk -F/ '{print $NF}'.
      9.$awk '{name=$1; belt=$3;if(belt ~ /yellow/) print name "is belt" belt }' gefforey.txt
    该命令将第一列的值赋给变量name,第三行的值赋给变量belt,并打印语句.awk允许在语句中进行赋值操作,赋值操作符有:=, +=, *=, / =, %=, ^ = .
      10.$awk 'gsub(/111/,222) {print $0}' gefforey.txt
    该命令将文件中所有包含111的数字替换为222,awk的内置函数有:
    g s u b ( r, s ) 在整个$ 0中用s替代r
    g s u b ( r, s , t ) 在整个t中用s替代r
    i n d e x ( s , t ) 返回s中字符串t的第一位置
    l e n g t h ( s ) 返回s长度
    m a t c h ( s , r ) 测试s是否包含匹配r的字符串
    s p l i t ( s , a , f s ) 在f s上将s分成序列a
    s p r i n t ( f m t , e x p ) 返回经f m t格式化后的e x p
    s u b ( r, s ) 用$ 0中最左边最长的子串代替s
    s u b s t r ( s , p ) 返回字符串s中从p开始的后缀部分
    s u b s t r ( s , p , n ) 返回字符串s中从p开始长度为n的后缀部分
    g s u b函数有点类似于s e d查找和替换。它允许替换一个字符串或字符为另一个字符串或字
    符,并以正则表达式的形式执行。第一个函数作用于记录$ 0,第二个g s u b函数允许指定目标,
    然而,如果未指定目标,缺省为$ 0。
    i n d e x(s,t)函数返回目标字符串s中查询字符串t的首位置。l e n g t h函数返回字符串s字符
    长度。m a t c h函数测试字符串s是否包含一个正则表达式r定义的匹配。s p l i t使用域分隔符f s将
    字符串s划分为指定序列a。s p r i n t函数类似于p r i n t f函数(以后涉及),返回基本输出格式f m t的
    结果字符串e x p。s u b(r,s)函数将用s替代$ 0中最左边最长的子串,该子串被( r)匹配。
    s u b(s,p)返回字符串s在位置p后的后缀。s u b s t r(s,p,n)同上,并指定子串长度为n。
      11.$echo "65" | awk '{printf "//%c ",$0}'
    该命令管道输出65到awk,并观察其ASCII字符.awk的printf函数格式如下:
    % c A S C I I字符
    % d 整数
    % e 浮点数,科学记数法
    % f 浮点数,例如(1 2 3 . 4 4)
    % g a w k决定使用哪种浮点数转换e或者f
    % o 八进制数
    % s 字符串
    % x 十六进制数

    awk命令也许是linux系统中最为复杂的命令,需要好好的练习!

  • 相关阅读:
    java基础(4)--javadoc文档与命令
    java基础(3)--pulic class与class的区别
    java基础(2)--main方法讲解
    java基础(1)--注释
    shell 测试文件状态运算符
    shell 算术运算符
    linux free命令详解
    shell 基本语法
    linux vim编辑器优化
    linux shell介绍
  • 原文地址:https://www.cnblogs.com/0616--ataozhijia/p/3748462.html
Copyright © 2011-2022 走看看