今天是:
带着程序的旅程,每一行代码都是你前进的一步,每个错误都是你成长的机会,最终,你将抵达你的目的地。
title

awk命令

AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。

语法

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

Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...

主要用途

  • AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。

参数说明:

  • -F fs or --field-separator fs
    指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:。
  • -v var=value or --asign var=value
    赋值一个用户定义变量。
  • -f scripfile or --file scriptfile
    从脚本文件中读取awk命令。
  • -mf nnn and -mr nnn
    对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。
  • -W compact or --compat, -W traditional or --traditional
    在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。
  • -W copyleft or --copyleft, -W copyright or --copyright
    打印简短的版权信息。
  • -W help or --help, -W usage or --usage
    打印全部awk选项和每个选项的简短说明。
  • -W lint or --lint
    打印不能向传统unix平台移植的结构的警告。
  • -W lint-old or --lint-old
    打印关于不能向传统unix平台移植的结构的警告。
  • -W posix
    打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
  • -W re-interval or --re-inerval
    允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
  • -W source program-text or --source program-text
    使用program-text作为源代码,可与-f命令混用。
  • -W version or --version
    打印bug报告信息的版本。

POSIX options:          GNU long options: (standard)
        -f progfile             --file=progfile
        -F fs                   --field-separator=fs
        -v var=val              --assign=var=val
Short options:          GNU long options: (extensions)
        -b                      --characters-as-bytes
        -c                      --traditional
        -C                      --copyright
        -d[file]                --dump-variables[=file]
        -e 'program-text'       --source='program-text'
        -E file                 --exec=file
        -g                      --gen-pot
        -h                      --help
        -L [fatal]              --lint[=fatal]
        -n                      --non-decimal-data
        -N                      --use-lc-numeric
        -O                      --optimize
        -p[file]                --profile[=file]
        -P                      --posix
        -r                      --re-interval
        -S                      --sandbox
        -t                      --lint-old
        -V                      --version
 

实例

例子文件 covid.txt

 吉布提,Djibouti,5841,2021-1-2
多米尼克,Dominica,88,2021-1-2
多米尼加,Dominican Republic,172965,2021-1-2
厄瓜多尔,Ecuador,214513,2021-1-2
埃及,Egypt,140878,2021-1-2
萨尔瓦多,El Salvador,46803,2021-1-2
赤道几内亚,Equatorial Guinea,5277,2021-1-2
厄立特里亚,Eritrea,1320,2021-1-2
爱沙尼亚,Estonia,28789,2021-1-2
斯威士兰,Eswatini,9711,2021-1-2
埃塞俄比亚,Ethiopia,125049,2021-1-2
斐济,Fiji,49,2021-1-2
芬兰,Finland,36604,2021-1-2
法国,France,2700480,2021-1-2
加蓬,Gabon,9571,2021-1-2
冈比亚,Gambia,3800,2021-1-2
格鲁吉亚,Georgia,228752,2021-1-2
德国,Germany,1773540,2021-1-2
印尼,Indonesia,751270,2021-1-1
伊朗,Iran,1231429,2021-1-1
伊拉克,Iraq,596193,2021-1-1
爱尔兰,Ireland,93532,2021-1-1
以色列,Israel,428510,2021-1-1

  1. 已逗号分隔打印第二列  awk -F , '{print $2}' covid.txt
  2.  按行打印每一列,NR已读取的行,NF最后一个字段 awk -F , '{print "Line No:"NR", No of fields:"NF, "$1="$1, "$2="$2, "$3="$3}' covid.txt
  3. 计算第三列的总和 awk -F , 'BEGIN{ sum=0; print "总和:" } { print $3"+"; sum+=$3 } END{ print "等于"; print sum }' covid.txt
分享到:

专栏

类型标签

网站访问总量