AWK学习的一些笔录
假设有一个文件test.txt:
name1 name11 name111
name2 name22 name222
name3 name33 name333
·查看
查看test.txt文本的全部内容 :awk \'{print $0}\' test.txt
查看test.txt文本的第一个域和第三个域:
awk \'{print $1,$3}\' test.txt//这是用空格相隔
awk \'{print $1\"\\t\"$3}\' test.txt//这是用制表符TAB相隔
·BEGIN
注意BEGIN一定要大写 (小写不执行)
要实现:
NAME NUM
-------------
name1 name111
name2 name222
name3 name333
这样的显示code如下:
awk \'BEGIN{print \"NAME\\tNUM\\n-------------\"} {print $1\"\\t\"$3}\' test.txt
如果不加BEGIN 那么每行都有\"NAME\\tNUM\\n-------------\" 这么一段显示,因为awk是按行显示的。
·END同样要大写 (小写不执行)
在最后显示END后面的内容。下面代码将会在最后显示:\"this is the end!\".
awk \'BEGIN{print \"NAME\\tNUM\\n-------------\"} {print $1\"\\t\"$3} END{print \"this is the end!\"}\' test.txt
·正则匹配 : ~ 匹配, !~ 不匹配
1、[]
awk \'/[Tt]est/\' test.txt //匹配Test和test,即不区分大小写
2、任意字符
抽取名字,其记录第一域的第四个字符是e,使用句点.。表达式/ ^ . . . e /意为行首前三个字符任意,第四个是e,尖角符号代表行首。
awk \'{if($1~/^...e/) print $0}\' test.txt
3、^ [ ^ d ] 必须匹配行首,并排除字符d,表达式为^ [ ^ d ]
·字符处理 split
awk \'BEGIN {print split(\"aa#bb#cc\",arr,\"#\")}\'
结果为3.数组arr为:arr[1]=\"aa\";$arr[2]=\"bb\";$arr[3]=\"cc\";
·调试awk,检查步骤:
1、确保整个a w k命令用单引号括起来。
2、确保命令内所有引号成对出现。
3、确保用花括号括起动作语句,用圆括号括起条件语句。
4、可能忘记使用花括号,也许你认为没有必要,但awk不这样认为,将按之解释语法。
·UCI
config users useradmin
option power \'root\'
option password \'2cc43538e62cc90345e155922056a1b3\'
拿useradmin的password 用:$CONFIG_useradmin_password
·eval
首先 eval是将后面的当作命令输出
如:root@Bizbox:/usr/lib/webif# eval \'ls -al ;date\' (单/双引号都行)
drwxr-xr-x 3 root root 1024 Oct 6 23:00 .
drwxr-xr-x 10 root root 1024 Jun 10 13:18 ..
-rwxrwxrwx 1 root root 1210 Mar 28 2008 apn.csv
-rwxrwxrwx 1 root root 14054 Sep 28 09:30 apply.sh
-rwxrwxrwx 1 root root 7904 Nov 6 21:57 webif.sh
Wed Nov 12 14:42:49 GMT 2008
其次 如果两个变量传值 一定要加上eval
eval $1=\'$tmp\'(假如$1为aaa,$tmp为bbb)
解析为 :先 aaa=\'$tmp\' 然后aaa=bbb
添加新评论