AWK高级编程 转载

转载自:http://blog.csdn.net/wzhwho/article/details/5513791

1. 程序元素

一个awk 程序是一对以模式(pattern) 与大括号框起来的操作(action) 组合而成的,或许,还会加上实现操作细节的函数(function ) 。针对每个匹配于输人数据的模式,操作会被执行,且所有模式都会针对每条输人记录而检查。模式或操作可省略其中一个。如果模式省略,则操作将被应用到每条输人记录; 如果操作省略,则默认操作为打印匹配之记录在标准输出上。以下是传统awk 程序的配置:

pattern  {action} 如模式匹配,则执行操作

pattern  {action} 如模式匹配,则打印记录

虽然,模式多半是数字或字符串表达式,不过awk 以保留字BEGIN 与END 提供两种特殊模式。

与BEGIN 关联的操作只会执行一次,在任何命令行文件或一般命令行赋值被处理之前,但是在任何开头的一V 选项指定已经完成之后。

END 操作也是只执行一次,用于所有输入数据已被处理完之后。它多半用于产生摘要报告,或是执行清除操作。

BEGIN 与END 模式可以是任意顺序,可以存在于awk 程序内的任何位置。不过,为了方便,我们通常将BEGIN 模式放在程序的第一个位置,而将END 模式放在最后。

2. 注释与空白

awk 里的注释是从# 开始到该行结束,就像在Shell 里那样。空行等同于空的注释。

3. 字符串与字符串表达式

awk 字符串包含零至多个字符,且在字符串的长度上没有限制,视可用内存而定。

字符串的比较,用的是传统的关系运算符:==( 相等) 、!=( 不等) 、<( 小于) 、<=( 小于等于) 、>( 大于) ,以及>=( 大于等于》。比较后返回l 为真,0 为假。比较不同长度的字符串,且其中一个字符串为另一个的初始子字符串时,较短的会定义为小于较长的那个,因此,“A ”< “AA ”的值为真。

awk 并无特殊的字符串接续运算符。也就是说,两个连续字符串,会自动地连接在一起。以下每一组赋值设置标量变量。为相同的具有四个字符的字符串:

s = “ABCD ”

s = “AB ”“CD ”

s = “A ”“B ”“CD ”

s = “A ”“B ”“C ”“D ”

字符串不需要是常数,如果我们继续上述的赋值:

t= s s s

则t 的值为“ABCDABCDABCD “。.

将数字转换为字符串,通过数字连接空字符串即可

n =123 ,

接着是:

s = ““ n ,把值“123 ”赋给s 。

awk 功能强大的地方大多来自于它对正则表达式的支持。有两个运算符:~( 匹配) 与!~( 不匹配) 让awk 更容易使用正则表达式:”ABC ”~ ”^[A-Z]+$ “,结果为真。

4. 数值与数值表达式

所有awk 里的数字,都以双精确度的浮点值表示。浮点数可以包含一个末端以字母e( 或E) 所表示的10 次方指数以及可选地带正负号的一个整数。举例来说:0.03125, 3.125e-2, 3125e-5 与0.003125E1 ,同样都是表示1/32 。因为awk 里所有算术都是浮点算术。

awk 并没有提供字符串转数字的函数,不过awk 的做法很简单:只要加个零到字符串里,例如:s="123" ,接着是n=0+s ,便将数字123 赋值给n 了。

5. awk 的数值运算符

表9 一:awk 的数值运算符( 优先级由大到小排列)

运算符                   说明

  1. ++ -- 增加与减少( 前置或后置)
  2.  
  3. ^ ** 指数( 右结合性)
  4.  
  5. ! + - 非、一元(unary) 加号、一元减号
  6.  
  7. * / % 乘、除、余数
  8.  
  9. + - 加、减
  10.  
  11. < <= == != > >= 比较
  12.  
  13. && 逻辑AND( 简写)
  14.  
  15. || 逻辑OR( 简写)
  16.  
  17. ?: 三元条件式
  18.  
  19. = += -= *= /= %= ^= **= 赋值( 右结合性)

6. 标量变量

保存单一值的变量叫做标量变量。

a wk 的变量名称必须以ACSII 字母或下划线开始,然后选择性地接上字母、下划线及字。因此,变量名称要匹配正则表达式[A-Za-z-][A-Za-z_0-9]* 。变量名称在实际上并没有长度的限制。awk 的变量名称是与大小写有关的:foo, Fo 。与FOO 是完全不同的三个名称。一般使用上以及建议用法是: 养成习惯,将局部变量全设为小写、全局变量第一个字母为大写,而内建变量则全是大写。

7. 数组变量

awk 允许在数组名称之后,以方括号将任意数字或字符串表达式 括起来作为索引。例如:

  1. telephone["Alice"]= “-"
  2.  
  3. telephone["Bob"]= “-"
  4.  
  5. telephone["Carol”]= “555-0136"
  6.  
  7. telephone["Don"]= “-"

以任意值为索引的数组,称之为关联数组,因为它们的名称与值是相关联的。重要的是,awk 将其应用于数组中,允许查找( find ) 、插入(insert ) 以及删除( remove) 等操作,在一定的时间内完成,与存储多少项目无关。

一个变量不能同时用作标量变量和数组变量。当你应用delet 。语句删除数组的元素

(element] 的时候,不会删除它的名称。因此。像这样的代码:

x[1]=3

delete x

x=789

会引发awk 发出提示,告诉你不可以给数组名称赋值.

8. 命令行参数

awk 通过内建变量ARGC( 参数计数) 与ARGV( 参数向量,或参数值) ,让命令行参数

可用。下面简短的程序说明其用法;

  1. [root@local~]#cat showargs.awk
  2.  
  3. BEGIN{
  4.  
  5. print ARGC= ”,ARGC
  6.  
  7. for (k=;k<ARGC; k++)
  8.  
  9. print "ARGV[”k”]=[”ARGV[k] “
  10.  
  11. }

再来看看将它用在一般awk 命令行上,会产生什么样的结果:

  1. [root@local~]# awk -v One= -v Two= -f showargs.awk Three= file1 Four= filet2 file3
  2.  
  3. ARGC=
  4.  
  5. ARGV[]=[awk]
  6.  
  7. ARGV[]=[Three=]
  8.  
  9. ARGV[]=[file1]
  10.  
  11. ARGV[]=[Four=]
  12.  
  13. ARGV[]=[file2]
  14.  
  15. ARGV[]=[file3]

9. 环境变量

awk 提供访问内建数组ENV 工RON 中所有的环境变量:

  1. [root@local~]#awk 'BEGIN {print ENVIRON["HOME"];print ENVIRON["USER]} ‘
  2.  
  3. /home/Jones
  4.  
  5. hones

通常你应将ENVIRON 看成是一个只读数组。

10. 模式

模式由字符串与 / 或数值表达式构建而成。常用的模式如下:

NF==0    选定空记录

NF>3     选定拥有三个字段以上的记录

NR<5    选定第 1 到第 4 条记录

(FNR==3)&&(FILENAME~/[.] [ch]$/) 来源于 C 源文件中选定记录 3

$1~/Jones/   选定字段 1 里有 . ” jones “的记录

/[Xx][Mm][Ll]/ 选定含有‘ 'XML' 。的记录,并忽略大小写差异

$0~/[Xx][Mm][Ll]/ 同上

11. 操作

以最简单的形式来说,纯print 意指在标准输出上,打印当前的输入记录($0) ,接着是输出记录分隔字符)ORS 的值,默认为单一换行字符。因此,下面这些程序所做的全是相同的操作:

1    模式为真,默认操作为打印

NR>0 {print} 有记录时打印( 恒为真)

1    {print}  模式为真。则打印,这是默认值

{print}  无模式则视为真,明确的打印,这是默认值

{print $0}  相同,但打印明确的值

下面的例子已经是完整的awk 程序。在每一个中,我们都只显示前三个输入字段,并通过省略选定模式,选定所有的记录。awk 程序语句以分号分隔,而且我们会使用些略微不同的操作代码,以修改输出字段分隔字符:

  1. [root@local~]#echo one two three four'| awk ‘{print $1,$2,$3}’
  2.  
  3. one two three
  4.  
  5. [root@local~]#echo ‘one two three four'| awk ‘{OFS=”…”;print $1,$2,$3}’
  6.  
  7. onetwothree
  8.  
  9. [root@local~]#echo one two three four'| awk ‘{OFS=”/n”;print $1,$2,$3}’
  10.  
  11. one
  12.  
  13. two
  14.  
  15. three

改变输出字段分隔字符而没有指定任何字段,不会改变$0:

  1. [root@local~]#echo one two three four'| awk ‘{OFS=”/n”;print $0}’
  2.  
  3. one two three four

不过,如果我们更改输出字段分隔字符,并指定至少一个字段( 即使我们未变更其值) ,

强制以新的字段分隔字符重新组合记录,则结果为:

  1. [root@local~]#echo one two three four'| awk ‘{OFS=”/n”;$1=$1;print $0}’
  2.  
  3. one
  4.  
  5. two
  6.  
  7. three
  8.  
  9. four

12. 在awk 中的单行程序

1.UNIX 单词计数程序wc;

  1. [root@local~]#awk ‘{C+=length($)+;w+=NF} END {print NR, W, C}’

2. 撇开NUL 字符问题,awk 其实可以轻松取代cat ,下面这两个例子会产生相同输出:

  1. [root@local~]# cat*.xml
  2.  
  3. [root@local~]# awk *.xml

3. 要将原始数据值及它们的对数打印为单栏的数据文件,可使用:

  1. [root@local~]# awk ‘{print $, log($)}’file(s)

4. 在以空白分隔字段的表格中,报告第n 栏的和:

  1. [root@local~]# awk -v COLUMN=n ‘{sum+=$COLUMN} END {print sum} file (s)

5. 微调上述报告,产生字段n 的平均值:

  1. [root@local~]# awk -v COLUMN=n ‘{sum+=$COLUMN} END {print sum/NR } file (s)

6. 针对花费文件( 其记录包含描述与金额于最后一个字段) ,打印花费总数。可使用内建变量NF 计算总值:

  1. [root@local~]# awk’{sum+=$NF; print $, sum}’files)

7. 这里是三种查找文件内文本的方式:

  1. [root@local~]#egrep pattern|pattern file (s)
  2.  
  3. [root@local~]#awk ‘/pattern|pattern/’file (s)
  4.  
  5. [root@local~]#awk ‘/pattern}pattern/ {print FILENAME ”: FNR ”: $} file(s)

8. 如果你要限制仅查找100 一150 行,可以通过两个工具程序,再搭配管道,不过这么做会漏掉位置信息:

  1. [root@local~]#sed -n -e ,150p -s file(s) | egrep 'pattern'

使用GNU sed 要搭配-s 选项,才能为每个文件重新开始行编号。另外,你也可以通过awk ,使用比较花哨的模式来做:

  1. [root@local~]#awk ‘(<=FNR) && (FNR <= ) && /pattern//
  2.  
  3. {print FILENAME ”:” FNR ”:”$}’file(s)

9. 要在一个四栏表格里,调换第二与第三栏,假设它们是以制表字符分隔,那么可以

使用下面三种方式的其中一种:

  1. [root@local~]#awk -F'/t’-v OFS='/t’{print $, $, $, $}’old > new
  2.  
  3. [root@local~]#awk BEGIN{FS=OFS="/t"}{print $, $ $ $} old>new
  4.  
  5. [root@local~]#awk F ‘/t’{print $"/t" $"/t" $"/t" $}’old>new

10. 要将各栏分隔字符由制表字符( 在此以·显示) 转换成& ,可在以下两种方式择一:

  1. [root@local~]#sed -e 's/ ·/&/g' file(s)
  2.  
  3. [root@local~]#awk ‘{BEGIN{FS="/t";OFS= “& ”}{$=$; print} file(s)

11. 下面这两个管道,都为删除已排序流里的重复行

  1. [root@local~]#sort file(s)|uniq
  2.  
  3. [root@local~]# sort file(s)|awk Last!=$ { print }{Last=$}’

12. 将回车字符/ 换行字符的行终结,一致转换为以换行字符作为行终结,可在下列方

式中选择一种:

  1. [root@local~]#sed e s//r$//’ file(s)
  2.  
  3. [root@local~]#sed e s/^M$//’ file(s)
  4.  
  5. [root@local~]# mawk BEGIN {RS=“/r/n"} {print}’file(s)

13. 要将单空格的文本行,转换为双空格的行,可在下列方式选择一种

  1. [root@local~]#sed e ‘/s/$//n/ ’file(s)
  2.  
  3. [root@local~]#awk BEGTN{ ORS = "/n/n"){print}’file(s)
  4.  
  5. [root@local~]#awk BEGIN{ ORS="/n/n" } file(s)
  6.  
  7. [root@local~]#awk {print $ “/n”} file(s)
  8.  
  9. [root@local~]#awk ‘{print;print ”} file(s)

13. 语句

13.1. 条件语句

  1. if(expressionl)
  2.  
  3. stateme t1
  4.  
  5. else if(expression2)
  6.  
  7. statement2
  8.  
  9. else if(expression3)
  10.  
  11. statement3
  12.  
  13. else if(expressionk)
  14.  
  15. statementk
  16.  
  17. else
  18.  
  19. statementk+l

13.2. 重复执行

awk 提供了 4 种重复执行语句 ( 循环 ):

1. 循环在起始处使用结束测试 :

while(expression)

statement

2. 循环在结尾处使用结束测试 :

do

statement

while (expression)

3. 循环执行可计数的次数 :

for(expr1;expr2; expr3)

statement

4. 循环处理关联数组里的元素 :

for(key in array)

statement

例如:

for (name in telephone)

print name“/t" telephone[name]

13.3 数组成员测试

成员测试key in array 是一个表达式: 如果key 为array 的一个索引元素,则计算为1( 真) 。如果key 不是array的一个索引元素,则!(key in array) 为1 。

对于具有多下标(subscript) 的数组,在测试时,请使用圆括号,并以逗点分隔下标列表:(i ,j ,…,n)in array

成员测试不可能建立数组元素,然而引用元素时,如果元素不存在,便会建立它。因此你应该这么写:

if("Sally" in telephone)

print "Sally is in the directory"

而非:

if (telephone["Sally"]!= ””)

print "Sally is in the directory"

因为第二种形式会在她(Sally) 不存在时,将其加入到目录里,并拥有一个空电话号码。

重点是: 你必须能够区分寻找索引(index) 与寻找特定值(value) 的差异。索引成员测试需要固定的时间,而值的查找时间是与数组里元素的个数成正比,这点我们在先前已通过break 语句内的for 循环解释过了。如果你需要时常用到这两种运算,那么构建反索引数组会比较实用:

for (name in telephone)

name_by_telephone[telephone[name]]=name

接下来,你就可以使用name_by_telephone ["555-0136"] 在一定时间内找到”Carol" 。当然,这里假定所有的值是唯一的: 如果这两人共享同一个电话,则name_by_telephone 数组只会记录最后一个名称。只要稍做修改就能解决这个问题:

  1. for (name in telephone)
  2.  
  3. {
  4.  
  5. if (telephone[name] in name_by_telephone)
  6.  
  7. name_by_telephone[telephone[name]]=/
  8.  
  9. name_by_telephone [telephone[name]) “/tname
  10.  
  11. e1se
  12.  
  13. name_by_telephone[telephone[name]]=name

现在,name_by_telephone 即包含了以制表字符分隔的具有相同电话号码的人名列表。

14. 用户控制输入

awk 也可以通过的getline 语句做这件事。getline 会返回一个值,当输入被成功读取时,它的返回值为++I ,而返回值为0 时,则表示在文件结尾,而-1 则表示错误。它的用法很多,见表。

  1. 语法 说明
  2.  
  3. getline 从当前输入文件中,读取下一条记录,存入$ ,并更新NF, NR FNR
  4.  
  5. getline var 从当前输入文件中,读取下一条记录,存入var ,并更新NR FNR
  6.  
  7. getline<file file 文件中,读取下一条记录,存入$ ,并更新NF, NR FNR
  8.  
  9. getline var<file file 文件中,读取下一条记录,存入var ,并更新NF, NR FNR
  10.  
  11. cmd|getline 从外部命令cmd 读取下一条记录,存入$ ,并更新NF
  12.  
  13. cmd|getline var 从外部命令cmd 读取下一条记录,存入var

命令管道在awk 里可以发挥强大的功能。管道可以在字符串中标明,也可以包含任意的Shell 命令。这里是与getline 搭配使用,如下:

  1. "date" I getline now
  2.  
  3. close("date")
  4.  
  5. print "The current time is".now

接下来说明的是: 如何在循环里使用命令管道:

  1. command="head -n 15 /etc/hosts"
  2.  
  3. while((command I getline s)>)
  4.  
  5. print s
  6.  
  7. close(command)

15. 执行外部程序

这里是解决电话名录排序问题较短的程序方案,使用临时性文件与systemty ,而非awk 管道:

  1. tmpfile= “/tmp/telephone.tmp^
  2.  
  3. for (name in telephone>
  4.  
  5. print name "/t" telephone[name]>tmpfile
  6.  
  7. close(tmpfilej
  8.  
  9. system("sort < tmpfile “)

临时性文件必须在调用system() 之前关闭,以确保任何缓冲区输出都正确地记录在文件内。

对于被system() 执行的命令并不需要调用close() ,因为close() 仅针对以I/O 重定向运算符所打开的文件或管道,还有getline, print 或printf 

传递给system[f 的命令可包含数行

system("cat <<EOFILE/nuno/ndos/ntres/nEOFILE"

它产生的输出和从嵌入文件复制到标准输出一样

Un0

das

tres

16. 用户自定义函数

函数定义如下:

function name(argl, }rg2, …,argn

{

statements

}

指定的参数在函数体中用来当作局部变量,它们会隐藏任何相同名称的全局性变量。函数也可用于程序它处,调用的形式为:

name(exprl, expr2, …,expn)  忽略任何的返回值

result=name(exprl, expr2, …,exprn) 将返回值存储到result 中

在每个调用点上的表达式,都提供初始值给函数参数型变量。以圆括号框起来的参数,必须紧接于函数名称之后,中间没有任何空白。

对标量参数所做的变动,调用者无从得知,不过对数组的变动就可看见了。换句话说,标量为传值(by vaule ),而数组则为传引用(by reference): 这对C 语言也是这样。

函数体里的return expression 语句会终止主体的执行,并将expression 的值与控制权传给调用点。如果expression 省略,则返回值由实现期定义。我们测试过的所有系统,返回的不是数字零就是空字符串。

17. 字符串函数

17.1. 子字符串提取

提取子字符串的函数:substr(string, start, 1en) ,会返回一份由string 的start 字符开始,共len 个字符长度的子字符串副本。字符的位置,从1 开始编号:substr("abcde", 2, 3) 将返回。bcd" 。 len 参数可省略,省略时,则默认为length(string)-start+1 ,选出字符串的剩余部分。

17.2. 字符串大小写转换

tolower(string) 会返回将所有字母改为同义的小写的string 副本,而toupper(string) 则返回被改为大写字母的string 副本。所以tolower("aBcDeF123") 返回”abcdef123",toupper("aBcDeF123") 返回"ABCDEF123" 。

17.3. 字符串大小写转换

index(string,  find) 查找string 里是否有字符串find ,然后返回string 里find 字符串的起始位置,如果在string 里找不到find ,则返回0 。例如index("abcdef","de") 会返回4 。

17.4. 字符串匹配

match (string, regexp) 将string 与正则表达式regexp 匹配,如果匹配,则返回

匹配string 的索引,不匹配,则返回0 。这种方式提供了比表达式(string~regexp) 还多的信息,后者只能得到计算值1 或0 。另外match ( ) 也具有一个有用的副作用: 它会将全局变量RSTART 设为在string 中要开始匹配的索引值,而将RLENGTH 设为要匹配的长度。而匹配子字符串则以substr(string, RSTART, RLENGTH) 表示。

17.5. 字符串替换

awk 在字符串替换功能上,提供两个函数:sub(regexp, replacement, target) 与gsub(regexp, replacement, target), sub() 将target 与正则表达式regexp 进行匹配,将最左边最长的匹配部分替换为字符串replacement。gsub() 的运行则有点类似,不过它会替换所有匹配的字符串( 前置g 表示global 全局之意) 。

17.6. 字符串替换

awk 针对当前输人记录$0 自动提供了方便的分割为字1,  $}, …、$NF ,也可以函数来做:split(string, array, regexp) 将string 切割为片段,并存储到array 里的连续元素。在数组里,片段放置在匹配正则表达式regexp 的子字符串之间。如果regexp 省略,则使用内建字段分隔字符FS 的当前默认值。函数会返回array 里的元素数量。

17.7. 字符串重建

join() 可确保参数数组不会被引用到,除非索引是在范围之内。否则,一个具有数组长度为0 的调用可能会建立arrayfl3 ,而修改了调用者的数组。插人的字段分隔字符为普通字符串,而非正则表达式,所以针对传递给split() 的一般正则表达式,join() 不会重建精确的原始字符串。

17.8. 字符串格式化

最后一个与字符串相关的函数是在用户控制下格式化数字与字符串:sprintf (format,expression1, expression2,…) ,它会返回已格式化的字符串作为其函数值。printf() 的运行方式也是这样,只不过它会在标准输出或重定向的文件上显示格式化后的字符串,而不是返回其函数值。较新的程序语言以更强大的格式化函数来取代格式控制字符串,但相对而言让代码变得很冗长。按照传统的文本处理应用来说,sprintf 与printf

18. 数值函数

函数           说明

atan2(y, x)   y 返回y/x 的反正切,值介于-pai 与+pai 之间。

cos(x)        返回x 的余弦值( 以弧度(radians) 计算) ,该值介于-1 与+1 之间

exp(x)        返回x 的指数,ex,

int(x)        返回x 的整数部分,截去前置的0

log(x)        返回x 的自然对数。

rand()        返回平均分布的虚拟随机r,O<=r<l

sin(x)        返回x 的正弦值( 以弧度(radians] 计算) ,该值介于-1 与+1 之间

sqrt(x)       返回x 的平方

srand(x)      设置虚拟随机产生器的种子为x ,并返回正确的种子。如果省略x ,则使用当前时间( 以秒计) 。如果。rand ( ) 未被调用,则awk 在每次执行时会从相同的默认种子开始;mawk 则不会。

系统巡检脚本 [复制链接]
--http://www.apelearn.com/bbs/thread-651-1-1.html

要求如下:
请使用vmstat采集间隔1秒连续60秒得数据,汇总各项数据的平均值,一并形成一个报告。

vmstat 1 60

  1.  
  2. #! /bin/bash
  3.  
  4. ## for vmstat and get the average number.
  5. ## Writern by Aming.
  6.  
  7. comm="/usr/bin/vmstat"
  8. f1="/tmp/1.txt"
  9. f2="/tmp/2.txt"
  10. f3="/tmp/3.txt"
  11.  
  12. $comm >$f1
  13. tail -n $f1 >$f2
  14. n=`awk '{print NF}' $f2 |head -n1`
  15. echo "">$f3
  16. for i in `seq $n`; do
  17. awk 'BEGIN {a=0}; {a=a+$"'$i'"};END{print a/NR}' $f2 >> $f3
  18. done
  19.  
  20. cat $f1
  21. echo "the average number is:"
  22. echo "-----------------------------------------------------------------------------------"
  23. cat $f3|xargs

删除文件的某一列,不打印文件的某一列

删除文件的某一行,不打印文件的某一行

比如删除第二列

赋值:'{$2="" ;print $0}'

  1. awk -F ',' '{$2="" ;print $0}' .txt >.txt

比如删除第二行

  1. awk '{print $$2}' .txt
  2. k dfe
  3.  
  4. ii l l


要打印一定要加BEGIN

[root@steven tmp]# awk '{print " '\'' "}'
^C
[root@steven tmp]# awk 'BEGIN{print " '\'' "}'
 '


计算之后再输出 老男孩 sersync实战

echo -en "$(date +%H%M)\t" >>/tmp/tmp1.log  &&tree |wc -l >>/tmp/tmp1.log
echo -en "$(date +%H%M)\t" >>/tmp/tmp2.log  &&tree |wc -l >>/tmp/tmp2.log

paste tmp1.log  tmp2.log >total.txt
awk '{if($1==$3) print $1" "$2" "$4" "(($2-$4));}' total.txt
 cat total.txt
1134    349    1134    350
1134    350    1134    45
1134    350    1134    45
1134    350    1134    45

awk '{if($1==$3) print $1" "$2" "$4" "(($2-$4));}' total.txt
1134 349 350 -1
1134 350 45 305
1134 350 45 305
1134 350 45 305

f

AWK高级编程 转载的更多相关文章

  1. 《C#高级编程》读书笔记

    <C#高级编程>读书笔记 C#类型的取值范围 名称 CTS类型 说明 范围 sbyte System.SByte 8位有符号的整数 -128~127(−27−27~27−127−1) sh ...

  2. Atitit. 高级软件工程师and 普通的区别 高级编程的门槛总结

    Atitit.  高级软件工程师and 普通的区别 高级编程的门槛总结 1. 完备的知识体系 2 2. 编程理论/原理的掌握 2 1.1. 掌握常用的概念(ORM,IOC,AOP,event driv ...

  3. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

  4. 《Hadoop》对于高级编程Hadoop实现构建企业级安全解决方案

    本章小结 ●    理解企业级应用的安全顾虑 ●    理解Hadoop尚未为企业级应用提供的安全机制 ●    考察用于构建企业级安全解决方式的方法 第10章讨论了Hadoop安全性以及Hadoop ...

  5. C# 6 与 .NET Core 1.0 高级编程 - 37 章 ADO.NET

    译文,个人原创,转载请注明出处,有不对的地方欢迎指出与交流. 英文原文:Professional C# 6 and .NET Core 1.0 - 37 ADO.NET --------------- ...

  6. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(上)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  7. C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 38 章 实体框架核心(下)),不对的地方欢迎指出与交流. 章节出自<Professional C# 6 ...

  8. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(上)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

  9. C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)

    译文,个人原创,转载请注明出处(C# 6 与 .NET Core 1.0 高级编程 - 39 章 Windows 服务(下)),不对的地方欢迎指出与交流. 章节出自<Professional C ...

随机推荐

  1. python深浅拷贝

    赋值引用,多变量使用同内存.对于可变数据对象,修改其中一个,影响其他.浅拷贝,只拷贝数据父对象,不拷贝其中子对象.深拷贝,拷贝对象及其子对象. 赋值引用:(修改,所有多影响) list1=[1,2,3 ...

  2. 命令行安装KVM

    查看libvirtd的状态: [root@super67 ~]# /etc/init.d/libvirtd status libvirtd (pid  2503) is running... 安装vn ...

  3. Windows Server 2012 FTP配置 后客户机一直登录不上

    配置FTP时出现奇怪的问题,服务器配置完成后客户机访问FTP站点时输入用户名密码一直不对. 经多次试验后发现,默认情况下是如下图配置.将用户下次登录时必须更改密码勾掉,勾选密码永不过期即可正常登录.

  4. DNS服务器的配置与应用: BIND9 的安装与配置

    3. BIND9 的安装与配置 3.1 bind简介 BIND (Berkeley Internet Name Domain)是Domain Name System (DNS) 协议的一个实现,提供了 ...

  5. 【新产品发布】发布STM8S 核心板

    搞了一些STM8的核心板供大家把玩,先上几张图: 物品购买地址: http://item.taobao.com/item.htm?spm=686.1000925.1000774.17.5GMO5M&a ...

  6. Open vSwitch使用案例扩展实验

    参考:Open vSwitch使用案例扩展实验 实验目的: 通过python脚本调用OpenvSwitch命令: 学习Mininet基于python脚本创建拓扑的实现: 进一步深度使用"ov ...

  7. Web 在线文件管理器学习笔记与总结(3)创建文件

    ① 创建文件 a. 文件名的合法性:不能包含 \/:*"<>| 等特殊字符 b. 检测当前目录下是否存在同名文件,如果存在提示请重命名后创建,如果不存在则直接创建 index.p ...

  8. DOS实用命令/工具

    winver  检查Windows版本wmimgmt.msc  打开windows管理体系结构wupdmgr  windows更新程序wscript  windows脚本宿主设置write  写字板w ...

  9. 微信自定义菜单说php json_encode不转义中文汉字的方法

    http://blog.csdn.net/qmhball/article/details/45690017 最近在开发微信自定义菜单. 接口比较简单,就是按微信要求的格式post一段json数据过去就 ...

  10. physical addressing virtual addressing 物理寻址 虚拟寻址

    Computer Systems A Programmer's Perspective Second Edition The main memory of a computer system is o ...