awk学习笔记(17) - 其他函数
2012-11-08 11:40
155 查看
awk的内置函数不多,除去数学和字符串的都归到其他类了。如下表:
下面举例说明:
1.close
该函数用于关闭输入输出文件,下面看两个例子,注意区别:
1)这是不带close的例子
先执行:
再执行:
输出:
说明:
由于没有关闭之前的date.txt文件,后面的内容会追加写入到date.txt中。
2)带有close的例子
先执行:
再执行:
输出:
说明:
由于中间关闭了文件,后一次写入就覆盖了前一次写入的内容。
2.system
该函数用于执行系统命令
输出:
说明:
上面输出的第一行是date命令的执行结果,第二行是system的执行结果
3.getline
该函数用于输入。有三种用法:
1)通过管道符输入
输出:
说明:
上面的程序指定了一个变量var来存放getline的结果,如果没有指定,将默认为$0。如下:
输出:
当然,如果是要输出某一列,可以用$n,如果是输出整行,$0也是可以省略的。
2)通过文件流输入
输出:
说明:
getline从文件流中读取每一行并输出。
3)从命令行输入
输出:
说明:
第二行是用户的输入,第三行是程序的执行输出。getline接收了当前用户的输入,并在其后输出。
总结:
至此,awk的学习笔记算是结束了,对于表格类的数据,如日志,csv等,用awk可以很方便的处理。目前用得比较多的是将excel导出的数据用awk整理成sql再通过命令行导入到库,在数据量较大时,这种处理会比直接导入excel要快得多。顺便说一下,学习完一门技术如果不用很快就会忘记的,多用才是王道,共勉。
本文出自 “凡星的技术博客” 博客,请务必保留此出处http://ustb80.blog.51cto.com/6139482/1053682
函数 | 说明 |
close( Expression ) | 用同一个带字符串值的 Expression 参数来关闭由 print 或 printf 语句打开的或调用 getline 函数打开的文件或管道。如果文件或管道成功关闭,则返回 0;其它情况下返回非零值。如果打算写一个文件,并稍后在同一个程序中读取文件,则 close 语句是必需的。 |
system(Command ) | 执行 Command 参数指定的命令,并返回退出状态。等同于system子例程。 |
Expression | getline [ Variable ] | 从来自 Expression 参数指定的命令的输出中通过管道传送的流中读取一个输入记录,并将该记录的值指定给 Variable 参数指定的变量。如果当前未打开将 Expression 参数的值作为其命令名称的流,则创建流。创建的流等同于调用popen子例程,此时 Command 参数取 Expression 参数的值且 Mode 参数设置为一个是 r 的值。只要流保留打开且 Expression 参数求得同一个字符串,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 |
getline [ Variable ] < Expression | 从 Expression 参数指定的文件读取输入的下一个记录,并将 Variable 参数指定的变量设置为该记录的值。只要流保留打开且 Expression 参数对同一个字符串求值,则对 getline 函数的每次后续调用读取另一个记录。如果未指定 Variable 参数,则 $0 记录变量和 NF 特殊变量设置为从流读取的记录。 |
getline [ Variable ] | 将 Variable 参数指定的变量设置为从当前输入文件读取的下一个输入记录。如果未指定 Variable 参数,则 $0 记录变量设置为该记录的值,还将设置 NF、NR 和 FNR 特殊变量。 |
1.close
该函数用于关闭输入输出文件,下面看两个例子,注意区别:
1)这是不带close的例子
先执行:
sudo awk 'BEGIN{"date"|getline;print $1 > "date.txt";"echo abc"|getline;print $0 > "date.txt"}'
再执行:
cat date.txt
输出:
2012年11月 abc
说明:
由于没有关闭之前的date.txt文件,后面的内容会追加写入到date.txt中。
2)带有close的例子
先执行:
sudo awk 'BEGIN{"date"|getline;print $1 > "date.txt";close("date.txt");"echo abc"|getline;print $0 > "date.txt"}'
再执行:
cat date.txt
输出:
abc
说明:
由于中间关闭了文件,后一次写入就覆盖了前一次写入的内容。
2.system
该函数用于执行系统命令
awk 'BEGIN{b=system("date");print b;}'
输出:
2012年11月 8日 星期四 11时09分35秒 CST 0
说明:
上面输出的第一行是date命令的执行结果,第二行是system的执行结果
3.getline
该函数用于输入。有三种用法:
1)通过管道符输入
awk 'BEGIN{"date"|getline var;print var;}'
输出:
2012年11月 8日 星期四 11时13分07秒 CST
说明:
上面的程序指定了一个变量var来存放getline的结果,如果没有指定,将默认为$0。如下:
awk 'BEGIN{"date"|getline;print $0;}'
输出:
2012年11月 8日 星期四 11时19分02秒 CST
当然,如果是要输出某一列,可以用$n,如果是输出整行,$0也是可以省略的。
2)通过文件流输入
awk 'BEGIN{while(getline < "address.dat"){print $0;};close("address.dat")}'
输出:
张三 13512345678 zhangsan@163.com 新浪 李四 13811111111 lisi@google.com 百度
说明:
getline从文件流中读取每一行并输出。
3)从命令行输入
awk 'BEGIN{print "Enter your name:";getline name;print name;}'
输出:
Enter your name: dddd dddd
说明:
第二行是用户的输入,第三行是程序的执行输出。getline接收了当前用户的输入,并在其后输出。
总结:
至此,awk的学习笔记算是结束了,对于表格类的数据,如日志,csv等,用awk可以很方便的处理。目前用得比较多的是将excel导出的数据用awk整理成sql再通过命令行导入到库,在数据量较大时,这种处理会比直接导入excel要快得多。顺便说一下,学习完一门技术如果不用很快就会忘记的,多用才是王道,共勉。
本文出自 “凡星的技术博客” 博客,请务必保留此出处http://ustb80.blog.51cto.com/6139482/1053682
相关文章推荐
- 考虑virtual函数以外的其他选择
- 小记:其他函数中堆/栈分配的内存在本函数中不可用---错误举例
- VC中调用其他程序的方法(函数)
- C++中构造函数调用其他函数
- Python中在脚本中引用其他文件函数的实现方法
- c函数之【其他函数】
- 《jQuery从入门到精通》第二十五节 其他工具函数
- JavaScript:调用frameset中其他页面中的函数
- SetWindowsHookEx原理(如何使用钩子,使用钩子hook其他进程的函数)
- SysUtils 中其他 PChar 函数: StrPas、StrNew、StrDispose、StrNextChar、StrFmt、StrLFmt、StrCharLength
- 关于函数指针的一些理解与其他相关内容的联想
- 实验 9 指针1 输入一行字符,要求用自定义的函数void f(char *line)统计和输出字符串中数字字符、英文字符和其他字符的个数
- 17_exit()函数
- Java笔记17:JAVA常用函数
- python3基础-17 内建函数
- C++学习笔记17——函数重载
- javascript:使用其他页面的js函数、变量
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess
- RELU 激活函数及其他相关的函数
- vc中调用其他应用程序的方法(函数) winexec,shellexecute ,createprocess