zoukankan      html  css  js  c++  java
  • linux-awk

    awk -h

    [root@node0 tmp]# awk -h

    Usage: awk [POSIX or GNU style options] -f progfile [--] file ... 从文件中读取程序

    Usage: awk [POSIX or GNU style options] [--] 'program' file ... 命令行直接写程序

    POSIX options:        GNU long options:

        -f progfile        --file=progfile 从指定的文件中读取程序

        -F fs            --field-separator=fs 指定字段分隔符,默认是一个或多个空格

        -v var=val        --assign=var=val 定义gawk程序中的变量及默认值

        -m[fr] val

        -O            --optimize

        -W compat        --compat

        -W copyleft        --copyleft

        -W copyright        --copyright

        -W dump-variables[=file]    --dump-variables[=file]

        -W exec=file        --exec=file

        -W gen-po        --gen-po

        -W help            --help

        -W lint[=fatal]        --lint[=fatal]

        -W lint-old        --lint-old

        -W non-decimal-data    --non-decimal-data

        -W profile[=file]    --profile[=file]

        -W posix        --posix

        -W re-interval        --re-interval

        -W source=program-text    --source=program-text

        -W traditional        --traditional

        -W usage        --usage

        -W use-lc-numeric    --use-lc-numeric

        -W version        --version

     

    To report bugs, see node `Bugs' in `gawk.info', which is

    section `Reporting Problems and Bugs' in the printed version.

     

    gawk is a pattern scanning and processing language.

    By default it reads standard input and writes standard output.

     

    Examples:

        gawk '{ sum += $1 }; END { print sum }' file

        gawk -F: '{ print $1 }' /etc/passwd

    示例

    1、从命令行读取程序脚本

    1.1、一条命令

    gawk程序脚本用一对大括号来定义。你必须将脚本命令放到两个大括号中{ }

    由于gawk命令行假定脚本是单个文本字符串,还必须将脚本放到单引号中 ' '

     

    数据字段变量:

    $0代表整个文本行

    $1代表文本行中分隔后的第1个数据字段

    $n代表文本行中分隔后的第n个数据字段

    在文本行中,每个数据字段都是通过字段分隔符划分的。默认的分隔符是任意的空白字符(空格或制表符)

     

    [root@node0 ~]# cat /etc/passwd |head -n 5

    root:x:0:0:root:/root:/bin/bash

    bin:x:1:1:bin:/bin:/sbin/nologin

    daemon:x:2:2:daemon:/sbin:/sbin/nologin

    adm:x:3:4:adm:/var/adm:/sbin/nologin

    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    [root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' '{print $1}' #以:为分隔符,打印第1列

    [root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' '{print $1" "$7}' #以:为分隔符,打印第1列和第7列

    [root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' 'BEGIN {print "user shell"} {print $1" "$7} END {print "ending"}' 添加BEGIN和END脚本

    将上例中的program写到文件中,BEGIN和END要和{ 在一行

    [root@node0 ~]# cat /etc/passwd |head -n 5|awk -F ':' -f format

    内置变量

    FILENAME awk浏览的文件名

    FNR 浏览文件的记录数

    FS 设置输入域分隔符,等价于命令行 -F选项

    NF 分隔后的列数

    NR 浏览的行数

    建议把FS写到BEGIN里,不然容易出问题

    [root@node0 ~]# cat /etc/passwd |head -n 5|awk '{FS=":"; print "row:"NR ",col:" NF",linecontent:"$0}'

    row:1,col:1,linecontent:root:x:0:0:root:/root:/bin/bash

    row:2,col:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin

    row:3,col:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

    row:4,col:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin

    row:5,col:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

    [root@node0 ~]# cat /etc/passwd |head -n 5|awk 'BEGIN {FS=":"} {print "row:"NR ",col:" NF",linecontent:"$0}'

    row:1,col:7,linecontent:root:x:0:0:root:/root:/bin/bash

    row:2,col:7,linecontent:bin:x:1:1:bin:/bin:/sbin/nologin

    row:3,col:7,linecontent:daemon:x:2:2:daemon:/sbin:/sbin/nologin

    row:4,col:7,linecontent:adm:x:3:4:adm:/var/adm:/sbin/nologin

    row:5,col:7,linecontent:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

  • 相关阅读:
    eclipse常用的快捷键
    如何保留小数点后N位?
    EditText设置/隐藏光标位置、选中文本和获取/清除焦点(转)
    java.lang.RuntimeException: Unable to instantiate activity ComponentInfo异常(转)
    STL优先队列 hdu1896
    工作排序问题 poj2376
    STL存储邻接表
    二叉树的遍历
    快速排序
    并查集 并查集来判断是否存在环路
  • 原文地址:https://www.cnblogs.com/jeancheng/p/13065041.html
Copyright © 2011-2022 走看看