awk高级玩法
1. 程序元素
一个awk 程序是一对以模式(pattern) 与大括号框起来的操作(action) 组合而成的,或许,还会加上实现操作细节的函数(function ) 。针对每个匹配于输人数据的模式,操作会被执行,且所有模式都会针对每条输人记录而检查。模式或操作可省略其中一个。如果模式省略,则操作将被应用到每条输人记录; 如果操作省略,则默认操作为打印匹配之记录在标准输出上。以下是传统awk 程序的配置:
pattern {action} 如模式匹配,则执行操作
pattern {action} 如模式匹配,则打印记录
虽然,模式多半是数字或字符串表达式,不过awk 以保留字BEGIN 与END 提供两种特殊模式。
与BEG 工N 关联的操作只会执行一次,在任何命令行文件或一般命令行赋值被处理之前,但是在任何开头的一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 的数值运算符( 优先级由大到小排列)
运算符 说明
++ -- 增加与减少( 前置或后置)
^ ** 指数( 右结合性)
! + - 非、一元(unary) 加号、一元减号
* / % 乘、除、余数
+ - 加、减
< <= == != > >= 比较
&& 逻辑AND( 简写)
|| 逻辑OR( 简写)
?: 三元条件式
= += -= *= /= %= ^= **= 赋值( 右结合性)
6. 标量变量
保存单一值的变量叫做标量变量。
a wk 的变量名称必须以ACSII 字母或下划线开始,然后选择性地接上字母、下划线及字。因此,变量名称要匹配正则表达式[A-Za-z-][A-Za-z_0-9]* 。变量名称在实际上并没有长度的限制。awk 的变量名称是与大小写有关的:foo, Fo 。与FOO 是完全不同的三个名称。一般使用上以及建议用法是: 养成习惯,将局部变量全设为小写、全局变量第一个字母为大写,而内建变量则全是大写。
7. 数组变量
awk 允许在数组名称之后,以方括号将任意数字或字符串表达式 括起来作为索引。例如:
telephone["Alice"]= “555-0134"
telephone["Bob"]= “555-0135"
telephone["Carol”]= “555-0136"
telephone["Don"]= “555-0141"
以任意值为索引的数组,称之为关联数组,因为它们的名称与值是相关联的。重要的是,awk 将其应用于数组中,允许查找( find ) 、插入(insert ) 以及删除( remove) 等操作,在一定的时间内完成,与存储多少项目无关。
一个变量不能同时用作标量变量和数组变量。当你应用delet 。语句删除数组的元素
(element] 的时候,不会删除它的名称。因此。像这样的代码:
x[1]=3
delete x
x=789
会引发awk 发出提示,告诉你不可以给数组名称赋值.
8. 命令行参数
awk 通过内建变量ARGC( 参数计数) 与ARGV( 参数向量,或参数值) ,让命令行参数
可用。下面简短的程序说明其用法;
[root@local~]#cat showargs.awk
BEGIN{
print ”ARGC= ”,ARGC
for (k=0;k<ARGC; k++)
print "ARGV[”k”]=[”ARGV[k] “
}
再来看看将它用在一般awk 命令行上,会产生什么样的结果:
[root@local~]# awk -v One=1 -v Two=2 -f showargs.awk Three=3 file1 Four=4 filet2 file3
ARGC=6
ARGV[0]=[awk]
ARGV[1]=[Three=3]
ARGV[2]=[file1]
ARGV[3]=[Four=4]
ARGV[4]=[file2]
ARGV[5]=[file3]
9. 环境变量
awk 提供访问内建数组ENV 工RON 中所有的环境变量:
[root@local~]#awk 'BEGIN {print ENVIRON["HOME"];print ENVIRON["USER]} ‘
/home/Jones
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 程序语句以分号分隔,而且我们会使用些略微不同的操作代码,以修改输出字段分隔字符:
[root@local~]#echo ‘one two three four'| awk ‘{print $1,$2,$3}’
one two three
[root@local~]#echo ‘one two three four'| awk ‘{OFS=”…”;print $1,$2,$3}’
one…two…three
[root@local~]#echo ‘one two three four'| awk ‘{OFS=”/n”;print $1,$2,$3}’
one
two
three
改变输出字段分隔字符而没有指定任何字段,不会改变$0:
[root@local~]#echo ‘one two three four'| awk ‘{OFS=”/n”;print $0}’
one two three four
不过,如果我们更改输出字段分隔字符,并指定至少一个字段( 即使我们未变更其值) ,
强制以新的字段分隔字符重新组合记录,则结果为:
[root@local~]#echo ‘one two three four'| awk ‘{OFS=”/n”;$1=$1;print $0}’
one
two
three
four
12. 在awk 中的单行程序
1.UNIX 单词计数程序wc;
[root@local~]#awk ‘{C+=length($0)+1;w+=NF} END {print NR, W, C}’
2. 撇开NUL 字符问题,awk 其实可以轻松取代cat ,下面这两个例子会产生相同输出:
[root@local~]# cat*.xml
[root@local~]# awk 1*.xml
3. 要将原始数据值及它们的对数打印为单栏的数据文件,可使用:
[root@local~]# awk ‘{print $1, log($1)}’file(s)
4. 在以空白分隔字段的表格中,报告第n 栏的和:
[root@local~]# awk -v COLUMN=n ‘{sum+=$COLUMN} END {print sum} ’file (s)
5. 微调上述报告,产生字段n 的平均值:
[root@local~]# awk -v COLUMN=n ‘{sum+=$COLUMN} END {print sum/NR } ’file (s)
6. 针对花费文件( 其记录包含描述与金额于最后一个字段) ,打印花费总数。可使用内建变量NF 计算总值:
[root@local~]# awk’{sum+=$NF; print $0, sum}’files)
7. 这里是三种查找文件内文本的方式:
[root@local~]#egrep ‘pattern|pattern’ file (s)
[root@local~]#awk ‘/pattern|pattern/’file (s)
[root@local~]#awk ‘/pattern}pattern/ {print FILENAME ”: ”FNR ”: ”$0} ’file(s)
8. 如果你要限制仅查找100 一150 行,可以通过两个工具程序,再搭配管道,不过这么做会漏掉位置信息:
[root@local~]#sed -n -e 100,150p -s file(s) | egrep 'pattern'
使用GNU sed 要搭配-s 选项,才能为每个文件重新开始行编号。另外,你也可以通过awk ,使用比较花哨的模式来做:
[root@local~]#awk ‘(100<=FNR) && (FNR <= 150) && /pattern//
{print FILENAME ”:” FNR ”:”$0}’file(s)
9. 要在一个四栏表格里,调换第二与第三栏,假设它们是以制表字符分隔,那么可以
使用下面三种方式的其中一种:
[root@local~]#awk -F'/t’-v OFS='/t’{print $1, $3, $2, $4}’old > new
[root@local~]#awk ‘BEGIN{FS=OFS="/t"}{print $1, $3 ,$2 ,$4} ’old>new
[root@local~]#awk –F ‘/t’{print $1"/t" $3"/t" $2"/t" $4}’old>new
10. 要将各栏分隔字符由制表字符( 在此以·显示) 转换成& ,可在以下两种方式择一:
[root@local~]#sed -e 's/ ·/&/g' file(s)
[root@local~]#awk ‘{BEGIN{FS="/t";OFS= “& ”}{$1=$1; print} ’file(s)
11. 下面这两个管道,都为删除已排序流里的重复行
[root@local~]#sort file(s)|uniq
[root@local~]# sort file(s)|awk ‘Last!=$0 { print }{Last=$0}’
12. 将回车字符/ 换行字符的行终结,一致转换为以换行字符作为行终结,可在下列方
式中选择一种:
[root@local~]#sed –e ‘s//r$//’ file(s)
[root@local~]#sed –e ‘s/^M$//’ file(s)
[root@local~]# mawk ‘BEGIN {RS=“/r/n"} {print}’file(s)
13. 要将单空格的文本行,转换为双空格的行,可在下列方式选择一种
[root@local~]#sed –e ‘/s/$//n/ ’file(s)
[root@local~]#awk ‘BEGTN{ ORS = "/n/n"){print}’file(s)
[root@local~]#awk ‘BEGIN{ ORS="/n/n" }1 ’ file(s)
[root@local~]#awk {print $0 “/n”} ’ file(s)
[root@local~]#awk ‘{print;print ” ”} ’ file(s)
13. 语句
13.1. 条件语句
if(expressionl)
stateme 刀t1
else if(expression2)
statement2
else if(expression3)
statement3
else if(expressionk)
statementk
else
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 数组只会记录最后一个名称。只要稍做修改就能解决这个问题:
for (name in telephone)
{
if (telephone[name] in name_by_telephone)
name_by_telephone[telephone[name]]=/
name_by_telephone [telephone[name]) “/t”name
e1se
name_by_telephone[telephone[name]]=name
现在,name_by_telephone 即包含了以制表字符分隔的具有相同电话号码的人名列表。
14. 用户控制输入
awk 也可以通过的getline 语句做这件事。getline 会返回一个值,当输入被成功读取时,它的返回值为++I ,而返回值为0 时,则表示在文件结尾,而-1 则表示错误。它的用法很多,见表。
语法 说明
getline 从当前输入文件中,读取下一条记录,存入$0 ,并更新NF, NR 与FNR
getline var 从当前输入文件中,读取下一条记录,存入var ,并更新NR 与FNR
getline<file 从file 文件中,读取下一条记录,存入$0 ,并更新NF, NR 与FNR
getline var<file 从file 文件中,读取下一条记录,存入var ,并更新NF, NR 与FNR
cmd|getline 从外部命令cmd 读取下一条记录,存入$0 ,并更新NF
cmd|getline var 从外部命令cmd 读取下一条记录,存入var
命令管道在awk 里可以发挥强大的功能。管道可以在字符字符串中标明,也可以包含任
意的Shell 命令。这里是与getline 搭配使用,如下:
"date" I getline now
close("date")
print "The current time is".now
接下来说明的是: 如何在循环里使用命令管道:
command="head -n 15 /etc/hosts"
while((command I getline s)>0)
print s
close(command)
15. 执行外部程序
这里是解决电话名录排序问题较短的程序方案,使用临时性文件与systemty ,而非awk 管道:
tmpfile= “/tmp/telephone.tmp^
for (name in telephone>
print name "/t" telephone[name]>tmpfile
close(tmpfilej
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 则不会。
awk高级玩法的更多相关文章
- 轻量级高性能ORM框架:Dapper高级玩法
Dapper高级玩法1: 数据库中带下划线的表字段自动匹配无下划线的Model字段. Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; 备 ...
- 【ASP.NET Core】依赖注入高级玩法——如何注入多个服务实现类
依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来.服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了依 ...
- 【Python基础】random 的高级玩法
random 模块的高级玩法 1.python 随机产生姓名 方式一: import random xing = [ '赵', '钱', '孙', '李', '周', '吴', '郑', '王', ' ...
- Word 查找替换高级玩法系列之 -- 段首批量添加字符
打开「查找和替换」输入框,按照下图操作: 更多查找替换高级玩法,参看:Word查找替换高级玩法系列 -- 目录篇 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)
- Word 查找替换高级玩法系列之 -- 把论文中的缩写词快速变成目录下边的注释表
1. 前言 问题:Word写论文如何把文中的缩写快速转换成注释表? 原来样子: 想要的样子: 2. 步骤 使用查找替换高级用法,替换缩写顺序 选中所有文字 打开查找替换对话框,输入以下表达式: 替换后 ...
- maven 高级玩法
maven 高级玩法 标签(空格分隔): maven 实用技巧 Maven 提速 多线程 # 用 4 个线程构建,以及根据 CPU 核数每个核分配 1 个线程进行构建 $ mvn -T 4 clean ...
- 十五天精通WCF——第九天 高级玩法之自定义Behavior
终于我又看完了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面言归正传, 看看这 ...
- [转]十五天精通WCF——第九天 高级玩法之自定义Behavior
终于我又看完了二期爱情保卫战,太酸爽了,推荐链接:http://www.iqiyi.com/a_19rrgublqh.html?vfm=2008_aldbd,不多说,谁看谁入迷,下面言归正传, 看看这 ...
- .Net中集合排序的一种高级玩法
背景: 学生有名称.学号, 班级有班级名称.班级序号 学校有学校名称.学校编号(序号) 需求 现在需要对学生进行排序 第一排序逻辑 按学校编号(序号)排列 再按班级序号排列 再按学生学号排列 当然,在 ...
随机推荐
- LeetCode之“链表”:Sort List
题目链接 题目要求: Sort a linked list in O(n log n) time using constant space complexity. 满足O(n log n)时间复杂度的 ...
- Linux常用命令(第二版) --文件管理命令
文件管理命令 并不建议:照着像命令大全这类的书来学! 常用命令大约有200个. 文件命名规则: a)除了'/'之外所有字符都合法! b)这些字符最好不用 1.空格符,制表符,退格符 2.连接符 3.特 ...
- HBase集群部署脚本
#!/bin/bash # Sync HBASE_HOME across the cluster. Must run on master using HBase owner user. HBASE_H ...
- Linux之ulimit详解(整理)
修改:一般可以通过ulimit命令或编辑/etc/security/limits.conf重新加载的方式使之生效通过ulimit比较直接,但只在当前的session有效,limits.conf中可以根 ...
- How to configure ODBC DSN in Client to access remote DB2 for Windows
How to configure ODBC DSN in Client to access remote DB2 for Windows MA Gen feng (Guangdong Unito ...
- java多继承
众所周知,java面向对象语言中只有单继承的编程语言,也许你会说,通过实现多个接口这种变通的方式达到多继承的目的.没错,你说的对,不过这并不是本片文章要说到的内容,本文要讲到的内容是java中实实在在 ...
- 《JUnit实战(第2版)》读书笔记
第1章 JUnit起步 主要了解JUnit,如何安装.运行JUnit 要点 JUnit4不需要像JUnit3那样extends TestCase类 Junit4基本都是用注解(该书都翻译为注释,但我喜 ...
- Linux的eth0,eth1,eth2,lo详解
eth0,eth1,eth2……代表网卡一,网卡二,网卡三……lo代表127.0.0.1,即localhost 参考:Linux命令:ifconfig 功能说明:显示或设置网络设备 语 法:ifcon ...
- JavaScript中对象数组 作业
var BaiduUsers = [], WechatUsers = []; var User = function(id, name, phone, gender, age, salary) { t ...
- MySql foreach属性
foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.info.details.具体说明:在list和数组中是其中的对象,在map中是val ...