添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
result = atan2 (y,x) * 180 / PI; printf "The arc tangent for (x=%f, y=%f) is %f degrees\n", x, y, result

输出结果为:

The arc tangent for (x=-10.000000, y=10.000000) is 135.000000 degrees result = cos(param * PI / 180.0); printf "The cosine of %f degrees is %f.\n", param, result

输出结果为:

The cosine of 60.000000 degrees is 0.500000. print "Random num1 =" , rand() print "Random num2 =" , rand() print "Random num3 =" , rand()

输出结果为:

Random num1 = 0.237788 Random num2 = 0.291066 Random num3 = 0.845814 gsub( Ere, Repl, [ In ] ) gsub 是全局替换( global substitution )的缩写。除了正则表达式所有具体值被替代这点,它和 sub 函数完全一样地执行。 $ awk 'BEGIN { str = "Hello, World" print "String before replacement = " str gsub("World", "Jerry", str) print "String after replacement = " str

输出结果为:

String before replacement = Hello, World String after replacement = Hello, Jerry substr(str, start, l) substr 函数返回 str 字符串中从第 start 个字符开始长度为 l 的子串。如果没有指定 l 的值,返回 str 从第 start 个字符开始的后缀子串。 $ awk 'BEGIN { str = "Hello, World !!!" subs = substr(str, 1, 5) print "Substring = " subs

输出结果为:

Substring = Hello index( String1, String2 ) 在由 String1 参数指定的字符串(其中有出现 String2 指定的参数)中,返回位置,从 1 开始编号。如果 String2 参数不在 String1 参数中出现,则返回 0(零)。 $ awk 'BEGIN { str = "One Two Three" subs = "Two" ret = index(str, subs) printf "Substring \"%s\" found at %d location.\n", subs, ret

输出结果为:

Substring "Two" found at 5 location. substr( String, M, [ N ] ) 返回具有 N 参数指定的字符数量子串。子串从 String 参数指定的字符串取得,其字符以 M 参数指定的位置开始。M 参数指定为将 String 参数中的第一个字符作为编号 1。如果未指定 N 参数,则子串的长度将是 M 参数指定的位置到 String 参数的末尾 的长度。 $ awk 'BEGIN { str = "Hello, World !!!" subs = substr(str, 1, 5) print "Substring = " subs

输出结果为:

Substring = Hello match( String, Ere ) 在 String 参数指定的字符串(Ere 参数指定的扩展正则表达式出现在其中)中返回位置(字符形式),从 1 开始编号,或如果 Ere 参数不出现,则返回 0(零)。RSTART 特殊变量设置为返回值。RLENGTH 特殊变量设置为匹配的字符串的长度,或如果未找到任何匹配,则设置为 -1(负一)。 $ awk 'BEGIN { str = "One Two Three" subs = "Two" ret = match(str, subs) printf "Substring \"%s\" found at %d location.\n", subs, ret

输出结果为:

Substring "Two" found at 5 location. split( String, A, [Ere] ) 将 String 参数指定的参数分割为数组元素 A[1], A[2], . . ., A[n],并返回 n 变量的值。此分隔可以通过 Ere 参数指定的扩展正则表达式进行,或用当前字段分隔符(FS 特殊变量)来进行(如果没有给出 Ere 参数)。除非上下文指明特定的元素还应具有一个数字值,否则 A 数组中的元素用字符串值来创建。 $ awk 'BEGIN { str = "One,Two,Three,Four" split(str, arr, ",") print "Array contains following values" for (i in arr) { print arr[i]

输出结果为:

Array contains following values Three sprintf(Format, Expr, Expr, . . . ) 根据 Format 参数指定的 printf 子例程格式字符串来格式化 Expr 参数指定的表达式并返回最后生成的字符串。 $ awk 'BEGIN { str = sprintf("%s", "Hello, World !!!") print str

输出结果为:

Hello, World !!! strtonum(str) strtonum 将字符串 str 转换为数值。 如果字符串以 0 开始,则将其当作八进制数;如果字符串以 0x 或 0X 开始,则将其当作十六进制数;否则,将其当作浮点数。 $ awk 'BEGIN { print "十进制数 = " strtonum("123") print "八进制数 = " strtonum("0123") print "十六进制数 = " strtonum("0x123")

输出结果为:

十进制数 = 123 八进制数 = 83 十六进制数 = 291

1、gsub、sub 使用

$ awk 'BEGIN{info="this is a test2012test!";gsub(/[0-9]+/,"||",info);print info}'
this is a test||test!

2、查找字符串(index 使用)

使用了三元运算符: 表达式 ? 动作1 : 动作2

$ awk 'BEGIN{info="this is a test2012test!";print index(info,"11111")?"ok":"no found";}'
no found
$ awk 'BEGIN{info="this is a test2012test!";print index(info,"is")?"ok":"no found";}'
$ awk 'BEGIN{info="this is a test2012test!";print index(info,"test")?"ok":"no found";}'

3、正则表达式匹配查找(match 使用)

$ awk 'BEGIN{info="this is a test2012test!";print match(info,/[0-9]+/)?"ok":"no found";}'

4、截取字符串(substr使用)

从第 4 个 字符开始,截取 10 个长度字符串。

$ awk 'BEGIN{info="this is a test2012test!";print substr(info,4,10);}'
s is a tes

5、字符串分割(split使用)

$ awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}'
4 test
1 this

分割 info,将 info 字符串使用空格切分为动态数组 tA。注意 awk for …in 循环,是一个无序的循环。 并不是从数组下标 1…n ,因此使用时候需要特别注意。

6、格式化字符串输出(sprintf使用)

其中格式化字符串包括两部分内容: 一部分是正常字符,这些字符将按原样输出; 另一部分是格式化规定字符, 以 % 开始, 后跟一个或几个规定字符,用来确定输出内容格式。 需要特别注意的是使用 printf 时默认是不会换行的,而 print 函数默认会在每行后面加上 \n 换行符。

$ awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2345; printf("%.2f,%.2u,%.2g,%X,%o\n",n1,n2,n3,n1,n1);}'
124.11,4294967295,1.2,7C,174
$  awk 'BEGIN{n1=124.113;n2=-1.224;n3=1.2645; printf("%.2f,%.2u,%.2g,%X,%o\n",n1,n2,n3,n1,n1);}'
124.11,4294967295,1.3,7C,174

注:看上面的 n3 输出值会发现,在使用 printf 处理时一个比较智能的功能是可以进行四舍五入保留小数点位的。

$ awk 'BEGIN { print "Number of seconds since the Epoch = " mktime("2014 12 14 30 20 10")

输出结果为:

Number of seconds since the Epoch = 1418604610 ISO8610 标准周所在的年份模除 100(00-99)。比如,1993 年 1 月 1 日属于 1992 年的第 53 周。所以,虽然它是 1993 年第 1 天,但是其 ISO8601 标准周所在年份却是 1992。同样,尽管 1973 年 12 月 31 日属于 1973 年但是它却属于 1994 年的第一周。所以 1973 年 12 月 31 日的 ISO8610 标准周所在的年是 1974 而不是 1973。 ISO 标准周所在年份的全称。 等价于 %b. 用十进制表示的 24 小时格式的小时(00-23) 用十进制表示的 12 小时格式的小时(00-12) 一年中的第几天(001-366) 月份(01-12) 分钟数(00-59) 换行符 (ASCII LF) 十二进制表示法(AM/PM) 十二进制表示法的时间(等价于 %I:%M:%S %p)。 等价于 %H:%M。 时间的秒数值(00-60) 制表符 (tab) 等价于 %H:%M:%S。 以数字表示的星期(1-7),1 表示星期一。 一年中的第几个星期(第一个星期天作为第一周的开始),00-53 一年中的第几个星期(第一个星期一作为第一周的开始),01-53。 以数字表示的星期(0-6),0表示星期日 。 十进制表示的一年中的第几个星期(第一个星期一作为第一周的开始),00-53。 本地日期表示 本地时间表示 年份模除 100。 十进制表示的完整年份。 时区,表示格式为+HHMM(例如,格式要求生成的 RFC 822或者 RFC 1036 时间头) 时区名称或缩写,如果时区待定则无输出。

位操作函数

  • 第一条语句 cmd = "tr [a-z] [A-Z]" 在 AWK 中建立了一个双向的通信通道。
  • 第二条语句 print 为 tr 命令提供输入。&| 表示双向通信。
  • 第三条语句 close(cmd, "to") 完成执行后关闭 to 进程。
  • 第四条语句 cmd |& getline out 使用 getline 函数将输出存储到 out 变量中。
  • 接下来的输出语句打印输出的内容,最后 close 函数关闭 cmd。
  • 现在我们来测试 nextfile 函数。

    $ awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt

    输出结果为:

    file1:str1 file2:str1 file2:str2 file2:str3 file2:str4