-
Notifications
You must be signed in to change notification settings - Fork 0
Linux awk
harryfyodor edited this page Jul 21, 2017
·
2 revisions
本篇笔记记录了awk的简单使用方法。内容主要参考了《The AWK Programming Language》的第一章的内容。
下面一个极为简单的例子可以展现awk程序的结构。
awk '$3 > 0 { print $1, $2 * $3 }' emp.data
AWK程序的结构 pattern { action }
运行AWK程序 awk 'program' input files
运行文件中的AWK程序awk -f progfile optional list of files
-
$0一整行 -
$1-$n每一行的字段 -
NF字段的数量 -
$NF最后一个字段的值 -
NR行号
{ printf("total pay for %-8s is $%.2f\n", $1, $2 * $3) }
%-8s表示左对齐8个空格,$%.2f表示两位结尾浮点数。类似C。
选择是awk的重要功能,主要是通过通过pattern里面的逻辑来完成。
BEGIN一般用来打印标题。而END更多是为了通过对数据统计,计算得出最终的值。
BEGIN { print "BEGIN一般是用来放标题的。"; print "" }
{ print }
END { print "END里面常常放对前面数据进行统计和计算的函数。前面的函数就类似循环。" }
下面的程序把$1通过空格连接在了一起然后输出。
{ names = names $1 " " }
END { print names }
-
length($0)字符串有多长 -
gsub(Ere, Repl, [In])Ere为正则,Repl替换值,[In]输入的字符串 -
substr(str, M, [N])str是输入的字符串,M起点,第一个为1,N为字符串长度 -
split(str, A, [Ere])str是输入的字符串,A分割的生成数组,Ere为分割符 -
match(str, Ere)str是输入的字符串,Ere为正则,作为匹配 -
tolower(str)变为小写 -
toupper(str)变为大写
不需要声明,直接使用。下面是一个很简单的反序的例子。
{ line[NR] = $0 }
# remember each input line
END { i = NR
# print lines in reverse order
while (i > 0) {
print line[i]
i = i - 1
}