zoukankan      html  css  js  c++  java
  • 尝到awk

    我前几天写的sed,这个时候继续了解它的兄弟,awk,两者都使用,一种感觉。既可以用来处理场。假设你想要做文本处理。sed删除。匹配,一些频繁更换使用,假设每一行文本,你想深入,一些每行和列处理的,例如,统计,格式化输出。awk就能够派上用场了

    查看自己ubuntu当前的awk

    which awk,其有用的是/usr/bin/mawk


    在学习sed篇中,我们知道,sed是读取文本的每一行到一个模式空间,然后对模式空间的内容进行处理。事实上awk差点儿相同。它也是对模式空间进行处理。可是它做的处理动作时"切片"

    1.awk的变量

    为什么要先说变量呢。由于不用变量,awk基本上就是废(游戏玩多了^-^)

    首先我们把/etc/passwd里面的第一行取出来备用

    head -1 /etc/passwd > test.txt

    $0  当前处理的记录(默认是行。除非指定RS)

    awk 'BEGIN{FS=":"}{print $0}' test.txt
    root:x:0:0:root:/root:/bin/bash

    $1---$n 当前的第几个字段。和命令行參数类似

    awk 'BEGIN{FS=":"}{print $1,$3}' test.txt

    FS 这里记住:F表示域field。S表示分隔seperate

    这里有两种写法:我喜欢用这样的,简洁明了

    awk -F: '{print $1,$2,$3}' test.txt

    RS 想想,R表示记录record,S同上

    awk 'BEGIN{RS=":"}{print $1,$3}' test.txt
    NF number of field 能够理解为多少列

    awk 'BEGIN{FS=":"}{print NF}' test.txt

    NR number of record 能够理解为多少行

    awk 'BEGIN{FS=":"}{print NR}' test.txt

    OFS  FS是处理这行的时候的分隔,O是指输出,OFS就是指输出时候的分隔符

    awk 'BEGIN{FS=":"}{print $1,$2,$3}' OFS="#" test.txt

    ORS 同理


    2.awk的格式化输出

    awk的处理完文本之后还能够依照格式化进行输出。非常强大吧,事实上说白了就是printf

    awk -F: '{printf "%s#%s#%s
    " ,$1,$2,$3}' test.txt
    %d 十进制整数

    %f 浮点数

    %s 字符串

    %% 百分号

    - 左对齐

    尽管简单,可是灵活运用,效果特殊


    3.awk的算术运算

    awk支持的运算符:+ - * / % **  awk甚至提供了一些数学函数sin(x),cos(x)等

    还能够做一些统计运算。统计某一列的值

    awk '{ sum += $1 }; END { print sum }' file
    awk 'NR!=1{a[$6]++;} END {for (i in a) print i ", " a[i];}'

    4.模式

    awk '模式{命令}‘ file

    模式能够是一下几种:

    1.正則表達式

    awk -F : '/^r/{print $1}' /etc/passwd
    2.表达式

    awk -F: '$3>=500{print $1,$3}' /etc/passwd
    awk -F: '$7 ~/bash$/{print $1,$7}' /etc/passwd
    awk -F: '$7 !~/bash$/{print $1,$7}' /etc/passwd
    3.BEGIN和END

    BEGIN{ 这里面放的是运行前的语句 }

    END {这里面放的是处理全然部的行后要运行的语句 }

    {这里面放的是处理每一行时要运行的语句}

    比如:

    awk 'BEGIN{test="123";print test}'
    发现的事实,没有文件也可以用awk,由于BEGIN它不依赖于输入,但请注意,打印,而无需使用内部变量$



  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5028752.html
Copyright © 2011-2022 走看看