awk的简单使用
文章目录
awk是什么?
AWK 作为三剑客之一,是一种处理文本文件的语言,是一个强大的文本分析工具。awk可以把文件逐行读入,然后以设置的分隔符(默认为空格), 切开的部分再进行各种分析处理。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
awk的语法
awk [选项参数] 'script' var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
其中script以pattern+action组成,并且awk中还可以使用变量以及控制语句进行高级的处理,具体而言(选项参数见)1:
awk '{pattern + action}' {filenames} #行匹配语句 awk '' 只能用单引号
pattern是awk在数据中查找的内容action是找到匹配内容后的操作filenames表示处理的文件
下图描述了 AWK 的工作流程:
BEGIN和END是两个特殊的模式,不属于常规的(pattern), 它们是用来在awk程序执行之前或之后执行特定的操作的语句块。
- BEGIN块:在awk程序执行之前,会先执行BEGIN语句块中的代码。通常在BEGIN语句块中进行一些初始化的操作,例如设置变量的初始值、打印程序的头部信息等。
- END块:在awk程序执行完后,会执行END语句块中的代码。通常在END语句中执行一些总结性的操作,例如统计计算结果,打印最终的输出信息等。
这两个语句块的位置是固定的,可以在awk程序中只出现一次,并且不需要与其他的模式进行匹配。
大致为:
awk 'BEGIN {print "开始处理数据"} {total += $1 } END {print "处理完成, 总和为: "total}' data.txt
awk内置变量
awk有很多内置变量用来设置环境信息,这些变量都是可以直接使用的
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
$0 整条记录。
$1 表示当前行的第一个域
$2 表示当前行的第二个域
$n 当前行的第n个域
例子
awk输出第一列
cat /etc/passwd | awk -F : '{print $1}'
计算有多少行…
cat test | awk 'BEGIN {a=0} {a+=1} END {print a}'
计算带以wp开头的行有多少
cat test | awk 'BEGIN {a=0} /wp/{a+=1} END {print a}'
分别计算带wp开头的行和以mask开头的行有多少
cat test | awk 'BEGIN {a=0;b=0} /^wp/{a+=1} /^mask/{b+=1} END {print "wp:"a "mask"b}
重点就是pattern的使用,你可以发现就是不断的pattern然后处理
awk删除第一列
gl | awk '{$1="";print $0}'
gl | awk '{for (i=2;i<NF;i++) printf $i "" ;print $NF}' printf没有回车
最后一列为2的行,第三列+3,不为2的行,直接输出
awk -F , '$7==2 {$3=$3+3; OFS=",";print $0} $7 !=2 {print $0;OFS=","}' 2PeopleMoving12.csv > test.csv
选项参数说明:
-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报告信息的版本。 ↩︎