awk built-in functions
2015-07-03 20:46
645 查看
参考: http://www.gnu.org/software/gawk/
rand(): return a random number
srand([x]): set the starting seed for random generator; if x is omitted, the current date and time are used for a seed.
len = asort(a, b): a isn’t changed. b is new array that comprises sequential integer indices and values of a.
len = asorti(a, b): s isn’t changed. b is new array that comprises sequential integer indices and values came from the indices of a.
sub(regexp, replacement [, target])
gsub(regexp, replacement [, target]): global sub()
split(string, array [, fieldsep [, seps ] ])
len = length([string])
match(string, regexp [, array])
str = sprintf(format, expr-list)
num = strtonum(str)
tolower(str)
tolower(str)
fflush(filename)
system(command)
strftime([format [, timestamp [, utc-flag] ] ])
systime(): the current time stamp since the system epoch
or(v1, v2 [, …])
xor(v1, v2 [, …])
compl(val): the bitwise complement
lshift(val, count): shifted left by count bits
rshift(val, count): shifted right by count bits
1. Numeric
int(x): return the nearest integerrand(): return a random number
srand([x]): set the starting seed for random generator; if x is omitted, the current date and time are used for a seed.
$ awk 'BEGIN{print int(1.8), int(-1.8), int(010), int(0x0A), int(3a), int(b2)}' 1 -1 8 10 3 0 # rand() function roll(n) { return 1 + int(rand() * n) } { printf("%d points", roll(6) + roll(6) + roll(6)); } # fixed seed, unchanged random number $ awk 'BEGIN{srand(1); print rand()}' 0.237788 $ awk 'BEGIN{srand(1); print rand()}' 0.237788 # the current date and time as a seed $ awk 'BEGIN{srand(); print rand()}' 0.367979 $ awk 'BEGIN{srand(); print rand()}' 0.291809
2. String
2.1 sort
2.1.1 sorted by values.
len = asort(a): a is changed, the indices are replaced by sequential integers starting with onelen = asort(a, b): a isn’t changed. b is new array that comprises sequential integer indices and values of a.
2.1.1 sorted by indeces.
len = asorti(a): s is changed. the indices change into values, the sequential integers act as the indiceslen = asorti(a, b): s isn’t changed. b is new array that comprises sequential integer indices and values came from the indices of a.
$ cat afile last de first sac middle cul $ awk '{a[$1]=$2} END{for(i in a) print i, a[i]}' afile first sac middle cul last de $ awk '{a[$1]=$2} END{len=asort(a); for(i=1;i<=len;i++) print i, a[i]}' afile 1 cul 2 de 3 sac $ awk '{a[$1]=$2} END{len=asort(a,b); for(i=1;i<=len;i++) print i, b[i]}' afile 1 cul 2 de 3 sac $ awk '{a[$1]=$2} END{len=asorti(a); for(i=1;i<=len;i++) print i, a[i]}' afile 1 first 2 last 3 middle $ awk '{a[$1]=$2} END{len=asorti(a,b); for(i=1;i<=len;i++) print i, b[i], a[b[i]]}' afile 1 first sac 2 last de 3 middle cul
2.2 substitution
result = gensub(regexp, replacement, how, [target]): “how” is g/G/1-n$ gawk 'BEGIN{a="abc def"; b=gensub(/(.+) (.+)/, "\\2 \\1", "g", a); print b}' def abc $ echo "a b c a b c" | gawk '{s=gensub(/a/, "AA", 2); print s}' a b c AA b c
sub(regexp, replacement [, target])
gsub(regexp, replacement [, target]): global sub()
$ awk 'BEGIN{s="water, water, everywhere"; sub(/at/,"ith",s); print s}' wither, water, everywhere # the precise substring (&) $ awk 'BEGIN{s="daabaaaa"; sub(/a+/, "C&C", s); print s}' dCaaCbaaaa $ cat bfile American Britain China Germany France $ awk '{gsub(/Britain/, "United Kingdom"); print}' bfile American United Kingdom China Germany France
2.3 substring
substr(string, start [, length ])split(string, array [, fieldsep [, seps ] ])
$ awk 'BEGIN{a="abcdefg";b=substr(a,1,2)"CDE"substr(a,6); print b}' abCDEfg $ awk 'BEGIN{split("cul-de-sac",a,"-",seps); for(i in a) print "a["i"]="a[i]; for(j in seps) print "seps["j"]="seps[j]}' a[1]=cul a[2]=de a[3]=sac seps[1]=- seps[2]=-
2.4 others
pos = index(string, find)len = length([string])
match(string, regexp [, array])
str = sprintf(format, expr-list)
num = strtonum(str)
tolower(str)
tolower(str)
$ awk 'BEGIN{print index("peanut", "an")}' 3 $ awk 'BEGIN{print length("peanut")}' 6 # the older versions of awk, the length() function could be called without any parentheses, but forget it. $ awk 'BEGIN{len=length "peanut"; print len}' 0peanut $ echo "foooobazbarrrrrr" | awk '{match($0, /(fo+).+(bar*)/, arr); print arr[1], arr[2]}' foooo barrrrrr $ awk 'BEGIN{pi=sprintf("%.2f (approx.)", 22/7); print pi}' 3.14 (approx.) $ awk 'BEGIN{s="0x11"; printf("%d\n", strtonum(s))}' 17 $ awk 'BEGIN{print toupper("cest la vie")}' CEST LA VIE $ awk 'BEGIN{print tolower("Welcome You")}' welcome you
3. IO
close(filename [, how]): “how” is “from” or “to”fflush(filename)
system(command)
4. Time
mktime(“YYYY MM DD HH MM SS [DST]”)strftime([format [, timestamp [, utc-flag] ] ])
systime(): the current time stamp since the system epoch
# default time format $ awk 'BEGIN{print PROCINFO["strftime"]}' %a %b %e %H:%M:%S %Z %Y $ awk 'BEGIN{print strftime()}' Mon Jul 6 09:29:13 EDT 2015
5. Bit-Manipulation
and(v1, v2 [, …])or(v1, v2 [, …])
xor(v1, v2 [, …])
compl(val): the bitwise complement
lshift(val, count): shifted left by count bits
rshift(val, count): shifted right by count bits
$ cat bits2str.awk function bits2str(bits, data, mask) { if (bits == 0) return "0" mask = 1; for (; bits != 0; bits = rshift(bits, 1)) data = (and(bits, mask) ? "1" : "0") data while ((length(data) % 8) != 0) data = "0" data return data } BEGIN { printf "123 = %s\n", bits2str(123) printf "0123 = %s\n", bits2str(0123) printf "0x99 = %s\n", bits2str(0x99) comp = compl(0x99) printf "compl(0x99) = %#x = %s\n", comp, bits2str(comp) shift = lshift(0x99, 2) printf "lshift(0x99, 2) = %#x = %s\n", shift, bits2str(shift) shift = rshift(0x99, 2) printf "rshift(0x99, 2) = %#x = %s\n", shift, bits2str(shift) } $ awk -f bits2str.awk 123 = 01111011 0123 = 01010011 0x99 = 10011001 compl(0x99) = 0x1fffffffffff66 = 00011111111111111111111111111111111111111111111101100110 lshift(0x99, 2) = 0x264 = 0000001001100100 rshift(0x99, 2) = 0x26 = 00100110
6. Data Type(gawk 4.0+)
isarray(x): distinguish an array from a scalar variable$ awk 'BEGIN{a[1]="one"; print isarray(a)}' 1 $ awk 'BEGIN{a="one"; print isarray(a)}' 0
相关文章推荐
- Android UI 调试常用工具(Dump view UI hierarchy for Automator)
- 初步探索java中的UUID
- IOS--UI--LessonCustumView 自定义视图
- android ndk-build IncrediBuild 分布式编译设置
- foundation-NSValue
- UI基础:事件.响应链
- UI基础:事件.响应链 分类: iOS学习-UI 2015-07-03 19:51 1人阅读 评论(0) 收藏
- iOS 优化UITableViewCell高度计算的那些事
- UI_UIImageView 基本操作
- 百度富文本 uEditor 调用不到,解决办法
- IOS--UI--LessontextField 文字框
- UITextField/文本输入框
- quick 截屏
- CruiseYoung提供的带有详细书签的电子书籍目录
- 使用Builder模式造车
- Android酷炫实用的开源框架(UI框架)
- UITableViewHeaderFooterView的使用+自动布局
- Android UI用户界面开发辅助工具(值得一试)
- iOS编程第四版第六章---UIViewController
- require.js 入门学习 (share)