打印所有以模式no或so开头的行。
$ awk '/^(no|so)/' test如果记录以n或s开头,就打印这个记录。
$ awk '/^[ns]/{print $1}' test如果第一个域以两个数字结束就打印这个记录。
$ awk '$1 ~/[0-9][0-9]$/(print $1}' test如果第一个等于100或者第二个域小于50,则打印该行。
$ awk '$1 == 100 || $2 < 50' test如果第一个域不等于10就打印该行。
$ awk '$1 != 10' test如果记录包含正则表达式test,则第一个域加10并打印出来。
$ awk '/test/{print $1 + 10}' test如果第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。
$ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则表达式mysql开头的记录为止,或到文件末尾。
$ awk '/^root/,/^mysql/' test如果第一个域小于第二个域则打印。
$ awk '{if ($1 <$2) print $2 "too high"}' test如果第一个域小于第二个域,则count加一,并打印OK
$ awk '{if ($1 < $2) {count++; print "OK"}}' test如果$1大于100则打印$1 BAD,否则打印OK
$ awk '{if ($1 > 100) print $1 "BAD" ; else print "OK"}' test如果$1大于100,则count加一,并打印$1,否则count减一,并打印$2
$ awk '{if ($1 > 100){ count++; print $1} else {count--; print $2}' test变量的初始值为1,若i小于可等于NF(记录中域的个数),则执行打印语句,且i增加1。直到i的值大于NF。
$ awk '{ i = 1; while ( i <= NF ) { print NF,$i; i++}}' test
$ awk '{for (i = 1; i<NF; i++) print NF,$i}' testbreak/continue语句。break用于在满足条件的情况下跳出循环;continue用于在满足条件的情况下忽略后面的语句,直接返回循环的顶端。如:
{for ( x=3; x<=NF; x++)next语句从输入文件中读取一行,然后从头开始执行awk脚本。如:
if ($x<0){print "Bottomed out!"; break}}
{for ( x=3; x<=NF; x++)
if ($x==0){print "Get next item"; continue}}
{if ($1 ~/test/){next}打印有值的数组元素。打印的顺序是随机的。
else {print}
}
$ awk '/^tom/{name[NR]=$1}; END{for(i in name){print name[i]}}' test打印$1中字符串出现的次数。它首先以第一个域作数组count的下标,第一个域变化,索引就变化。
$ awk '{count[$1]++} END{for(name in count) print name,count[name]}' testdelete函数用于删除数组元素。分配给数组line的是第一个域的值,所有记录处理完成后,special for循环将删除每一个元素。
$ awk '{line[x++]=$1} END{for(x in line) delete(line[x])}' test在整个记录中匹配,替换只发生在第一次匹配发生的时候。
$ awk '{ sub(/test/, "mytest"); print }' test在整个记录的第一个域中进行匹配,替换只发生在第一次匹配发生的时候。
$ awk '{ sub(/test/, "mytest"); $1}; print }' test在整个文档中匹配test,匹配的都被替换成mytest。
$ awk '{ gsub(/test/, "mytest"); print }' test在整个文档的第一个域中匹配,所有匹配的都被替换成mytest。
$ awk '{ gsub(/test/, "mytest"), $1 }; print }' test
Bookmark this post:
|
0 评论:
发表评论