简介

awk的命名来自于他的三位创始人Alfred Aho 、Peter Weinberger 和 Brian Kernighan 的姓氏的首字母。

有多种版本:New awk(nawk),GNU awk( gawk) 一般在linux中awk就指gawk,gawk 是 AWK 的 GNU 版本

值得说的是,gawk被他的创始人定义为模式扫描和处理语言而不是文本处理工具,事实上gawk可以说就是一个文本分析工具。之所以awk被他的创始人定义为一门语言我想其寓意可能有两点,首先作为一门语言,awk会有自己比较丰富程序设计语言。其次也是awk功能强大的一种体现。

本文将会较为详细的介绍关于awk的各种用法,同时附带大量的示例实际操作,有助于大家理解。

基本用法:

awk [options] ‘program’ var=value file…

awk [options] -f programfile var=value file…

awk [options] 'BEGIN{ action;… } pattern{ action;… } END{ action;… }' file ...

awk 程序通常由:BEGIN语句块、能够使用模式匹配的通用语句块 、END语句块,共3部分组成

program通常是被单引号或双引号中建议使用单引号

选项:

-F 指明输入时用到的字段分隔符

-v var=value: 自定义变量

一、语法

基本格式:

awk [options] 'program' file…

program:pattern{action statements;..}

pattern和action:

• pattern部分决定动作语句何时触发及触发事件

BEGIN,END

• action statements对数据进行处理,放在{}内指明

print, printf

分割符、域和记录:

awk执行时,由分隔符分隔的字段(域)标记$1,$2..$n称 为域标识。

$0为所有域,注意:和shell中变量$符含义不同

文件的每一行称为记录

省略action,则默认执行 print $0 的操作

二、awk工作原理

第一步:执行BEGIN{action;… }语句块中的语句

第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ action;… }语句块,它逐行扫描文件,从第一行到最后一行重复这 个过程,直到文件全部被读取完毕。

第三步:当读至输入流末尾时,执行END{action;…}语句块

BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个 可选的语句块,比如变量初始化、打印输出表格的表头等语句通常 可以写在BEGIN语句块中

END语句块在awk从输入流中读取完所有的行之后即被执行,比如 打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块

pattern语句块中的通用命令是最重要的部分,也是可选的。如果 没有提供pattern语句块,则默认执行{ print $0 },即打印每一个读取到的行,awk读取的每一行都会执行该语句块

三、变量

awk中的变量有两种,内置变量和自定义变量

awk中的内置变量

  1. FS:输入字段分隔符,默认为空白字符

    awk -v FS=':' '{print $1,FS,$3}’ /etc/passwd

    awk –F: '{print $1,$3,$7}’ /etc/passwd
[root@CentOS6 ~]#awk -v FS=':' '{print $1,FS,$3}' /etc/passwd		#变量直接引用,awk同样可以引用bash中定义的变量
root : 0
bin : 1
daemon : 2
[root@CentOS6 ~]#s=':';awk -v FS="$s" '{print $1,$3}' /etc/passwd #引用bash中定义的变量
root 0
bin 1
  1. OFS:输出字段分隔符,默认为空白字符

    awk -v FS=‘:’ -v OFS=‘:’ '{print $1,$3,$7}’ /etc/passwd
  2. RS:输入记录分隔符,指定输入时的换行符,原换行符仍有效

    awk -v RS=' ' ‘{print }’ /etc/passwd
  3. ORS:输出记录分隔符,输出时用指定符号代替换行符

    awk -v RS=' ' -v ORS='###'‘{print }’ /etc/passwd
  4. NF:字段数量

    awk -F: ‘{print NF}’ /etc/fstab,引用内置变量不用$
[root@CentOS6 ~]#awk -F: '{print NF}' /etc/passwd
7 #统计行字段数,指定分隔符为:

awk -F: '{print $(NF-1)}' /etc/passwd

[root@CentOS6 ~]#awk -F: '{print $(NF-1)}' /etc/passwd
/root #打印倒数第二个字段,分隔符为:
/bin
/sbin
  1. NR:行号

    awk '{print NR}' /etc/fstab ;

    awk END'{print NR}' /etc/fstab
[root@CentOS6 ~]#awk 'END{print NR}' /etc/fstab
16 #统计行号
  1. FNR:各文件分别计数,行号

    awk '{print FNR}' /etc/fstab /etc/inittab

    FILENAME:当前文件名

    awk '{print FILENAME}’ /etc/fstab
  2. ARGC:命令行参数的个数

    awk '{print ARGC}’ /etc/fstab /etc/inittab

    awk ‘BEGIN {print ARGC}’ /etc/fstab /etc/inittab
[root@CentOS6 ~]#awk 'END{print ARGC}' /etc/fstab /etc/passwd
3 #一般认为命令之后的项目都是参数,但awk认为awk自身也是一个参数
  1. ARGV:数组,保存的是命令行所给定的各参数

    awk ‘BEGIN {print ARGV[0]}’ /etc/fstab /etc/inittab

    awk ‘BEGIN {print ARGV[1]}’ /etc/fstab /etc/inittab

awk自定义变量

awk中的自定义变量区分大小写

两种定义方式:

(1) -v var=value

(2) 在program中直接定义

示例:

在program之外定义变量并引用
[root@CentOS6 ~]#awk -v test='hello,gawk' 'BEGIN{print test}' /etc/fstab
hello,gawk
直接在program中定义以及引用变量
[root@CentOS6 ~]#awk -F: '{sex="male";print $1,sex,age;age=18}' /etc/passwd
root male #打印第一行时变量age还没有值所以第一行age不打印
bin male 18

四、操作符

算术操作符:

x+y, x-y, x*y, x/y, x^y, x%y

-x: 转换为负数

+x: 转换为数值

字符串操作符:没有符号的操作符,字符串连接

赋值操作符:

=, +=, -=, *=, /=, %=, ^=

[root@CentOS6 ~]#awk 'BEGIN{print i++,i}'
0 1 #赋值打印先后问题
[root@CentOS6 ~]#awk 'BEGIN{print ++i,i}'
1 1
[root@CentOS6 ~]#awk  '{n=100;print sum+=n }' /etc/fstab
100 #sum+=n就等于sum=sum+n
200
300

++, --

比较操作符:

==, !=, >, >=, <, <=

模式匹配符:

~:左边是否和右边匹配包含

!~:是否不匹配

[root@CentOS6 ~]#awk -F: '$0~/^root/{print $0}' /etc/passwd
#打印行首为root的行
root:x:0:0:root:/root:/bin/bash

逻辑操作符:与&&,或||,非!

awk中的逻辑操作符与或非值表示逻辑关系,不像bash中有短路效果

[root@CentOS6 ~]#awk -F: '!($3>=500){print $3}' etc/passwd
0 #打印小于500的UID
81
499

函数调用

function_name(argu1, argu2, ...)

条件表达式(三目表达式)

selector?if-true-expression:if-false-expression

[root@CentOS6 ~]#awk -F: '{$3>=500?usertype="Common User":usertype="Sysadmin or SysUser";printf "%15-s:%-s\n",$1,usertype}' /etc/passwd
# 如果$3UID大于500定义变量,usertype用户类型是普通用户,否则定义变量usertype为系统管理员或者系统用户
#printf指定打印格式,$1用户名左对齐指定宽度15个字符,引用变量usertype左对齐,加换行符
root :Sysadmin or SysUser
bin :Sysadmin or SysUser
huxiaoqi :Common User
gentoo :Common User

五、awk PATTERN

PATTERN:根据pattern条件,过滤匹配的行,再做处理

(1)如果未指定:空模式,匹配每一行

(2) /regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来

awk '/^UUID/{print $1}' /etc/fstab #打印行首为UUID行的第一条属性

awk '!/^UUID/{print $1}' /etc/fstab #打印行首不是UUID的第一条属性

(3) relational expression: 关系表达式,结果为“真”才会被处理

真:结果为非0值,非空字符串

假:结果为空字符串或0值

[root@CentOS6 ~]#awk -F: 'i=!i{print NR,$0,i}' /etc/passwd
#打印奇数行加行号和当时的i的值
#首次循环中,i的初始值为空,那么!i不为空,所以打印后续动作
#第二轮循环,i值初始值不为空,!i为空,跳过后续动作
1 root:x:0:0:root:/root:/bin/bash 1
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin 1
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin 1

(4)line ranges:行范围

startline,endline:/pat1/,/pat2/ 不支持直接给出数字

格式

awk -F: ‘/root>/,/nobody>/{print $1}' /etc/passwd

awk -F: ‘(NR>=10&&NR<=20){print NR,$1}' /etc/passwd

[root@CentOS6 ~]#awk -F: '(NR>=10&&NR<=13){print NR,$1}' /etc/passwd
10 uucp #打印行号大于等于10并且小于等于13的用户名加行号
11 operator
12 games
13 gopher

(5) BEGIN/END模式

BEGIN{}: 仅在开始处理文件中的文本之前执行一次

END{}:仅在文本处理完成之后执行一次

示例:

[root@CentOS6 ~]#awk -F: 'BEGIN{print "USER UID \n---------------"}{print $1,$3}END{print "===================="}' /etc/passwd
USER UID
---------------
root 0
...
baobaotian 508
====================

六、awk action

action statements对数据进行处理,放在{}内指明

awk [options] 'program:pattern{action statements;..} ' file…

常用的action分类

(1) Expressions:算术,比较表达式等

(2) Control statements:if, while等

(3) Compound statements:组合语句

(4) input statements:输入项目

(5) output statements:print等

print格式

要点:

(1) 逗号分隔符

(2) 输出的各item可以字符串,也可以是数值;当前记录的字段、 变量或awk的表达式

(3) 如省略item,相当于print $0

示例:

awk '{print "hello,awk"}'

[root@CentOS6 ~]#awk '{print "hello,world"}'
haha #每次从标准输入读入行都会打印“hello,world”
hello,world

awk –F: '{print}' /etc/passwd

awk –F: ‘{print “wang”}’ /etc/passwd

awk –F: ‘{print $1}’ /etc/passwd

awk –F: ‘{print $0}’ /etc/passwd

awk –F: ‘{print $1”\t”$3}’ /etc/passwd

[root@CentOS6 ~]#awk -F : '{print $1"\t"$3}' /etc/passwd
root 0 #-F: 指定:为分隔符
bin 1 #打印用户名和UID
daemon 2

tail –3 /etc/fstab |awk ‘{print $2,$4}’ #awk自动理解文件的分隔符

printf

格式化输出:printf “FORMAT”, item1, item2, ...

(1) 必须指定FORMAT

(2) 不会自动换行,需要显式给出换行控制符,\n

(3) FORMAT中需要分别为后面每个item指定格式符

格式符:与item一一对应

%c: 显示字符的ASCII码

%d, %i: 显示十进制整数

%e, %E:显示科学计数法数值

%f:显示为浮点数

%g, %G:以科学计数法或浮点形式显示数值

%s:显示字符串

%u:无符号整数

%%: 显示%自身

修饰符:

#[.#]:第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f

-: 左对齐(默认右对齐) %-15s

+:显示数值的正负符号 %+d

[root@CentOS6 ~]#awk -F: '{printf "%-20s %10d\n",$1,$3}' /etc/passwd
#指定$1是字符串,左对齐指定宽度20个字符,$3为十进制字符,默认右对齐宽度10个字符
#指定换行符\n
root 0
bin 1
daemon 2

七、awk控制语句

主要的控制语句:

{ statements;… } 组合语句

if(condition) {statements;…} 条件判断语句

if(condition) {statements;…} else {statements;…}

while(conditon) {statments;…} 循环语句

do {statements;…} while(condition)

for(expr1;expr2;expr3) {statements;…}

break

continue

delete array[index]

delete array

exit

if-else语句:

语法:

if(condition){statement;…}[else statement]

if(condition1){statement1}else if(condition2){statement2} else{statement3}使用场景:对awk取得的整行或某个字段做条件判断

示例:

[root@CentOS6 ~]#awk -F: '{if($3>=500){printf "Common user:%s\n",$1}else{printf"root or Sysuser: %s\n",$1}}' /etc/passwd		#条件判断语句后的多条statement要用大括号括起来
root or Sysuser: root #如果UID大于等于500就打印用户名加"root or Sysuser:"
root or Sysuser: bin #否则打印用户名加"Common user:"
Common user:huxiaoqi
Common user:gentoo
[root@CentOS6 ~]#df -h|awk -F% '/^\/dev\/sd/{print $1}'|awk '$NF>=10{print $1,$NF}'
/dev/sda2 11 #第一次awk过滤以取出/dev/sd开头的行,-F%指定分隔符打印$1目的是去掉%号让第二次可以对$NF直接进行数字比较
[root@CentOS6 ~]#awk 'BEGIN{test=87;if(test>90){print"Very good"}else if(test>60){print "good"}else{print "no pass"}}'
good #先变量赋值,再使用条件判断语句判断变量,如果变量值大于90打印"Very good",如果变量值大于60打印"good",否则打印"no pass"

while循环

语法:

while(condition){statement;…}

条件“真”,进入循环;条件“假”,退出循环

使用场景:

对一行内的多个字段逐一类似处理时使用

对数组中的各元素逐一处理时使用

[root@CentOS7 ~]#awk '/^[[:space:]]*linux16/{i=1;while(i<=NF){if(length($i)>=10){print $i,length($i)};i++}}' /etc/grub2.cfg
#/^[[:space:]]*linux16/ 匹配行首有任意数量空格跟linux16的行
#设定i初始值为1进入循环并且每次循环自增,(i<=NF)循环次数和字段数NF相等
#循环内置条件判断,判断length($i)shell内置函数字段长度大于等于10,那么就打印该字段以及字段长度
/vmlinuz-3.10.0-514.el7.x86_64 30
root=UUID=851ee323-783c-44fe-93f5-333b9fe02b34 46
crashkernel=auto 16
LANG=en_US.UTF-8 16
net.ifnames=0 13
/vmlinuz-0-rescue-a8324cea4b7748b7a2b0c26dd1a9fa55 50
root=UUID=851ee323-783c-44fe-93f5-333b9fe02b34 46
crashkernel=auto 16
[root@CentOS6 ~]#cat f1.txt
1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
[root@CentOS6 ~]#awk '{i=1;sum=0;while(i<=NF){sum+=$i;i++};print sum,i}' f1.txt
55 11 #将一条记录的所有字段加总
165 12 #每条记录进入循环以后sum清零
#内置循环,循环次数等于字段个数
#如果不清零每条记录的sum值那么将统计文本内所有字段的总和
[root@CentOS6 ~]#awk 'BEGIN{i=1;sum=0;while(i<=100){sum+=i;i++};print sum}'
5050 #设定初始值i=1;sum=0,i小于100进入循环每次自增1循环100次,计算1到100之间的数字之和

do-while循环

语法:do {statement;…}while(condition)

意义:无论真假,至少执行一次循环体

for循环

语法:

for(expr1;expr2;expr3) {statement;…}

常见用法:

for(variable assignment;condition;iteration process)

{for-body}

特殊用法:

能够遍历数组中的元素

语法:for(var in array) {for-body}

[root@CentOS6 ~]#time awk 'BEGIN{for(i=0;i<=1000000;i++){sum+=i}print sum}'
500000500000
real 0m0.120s
user 0m0.119s
sys 0m0.001s

bash awk性能比较

分别用shell,awk,bc计算1到1000000之间所有数字之和比较消耗时间

awk表现:

[root@CentOS6 ~]#time awk 'BEGIN{i=1;sum=0;while(i<=1000000){sum=sum+i;i++}print sum}'
500000500000
real 0m0.216s
user 0m0.212s
sys 0m0.004s

shell表现:

[root@CentOS6 ~]#time (sum=0;for (( i=0; i<=1000000 ;i++ ));do let sum+=i;done;echo $sum)
500000500000
real 0m16.710s
user 0m15.939s
sys 0m0.767s

bc表现:

[root@CentOS6 ~]#time(seq -s "+" 1000000|bc)
500000500000 #seq -s "+" 指定seq分隔符为"+"
real 0m1.383s
user 0m1.320s
sys 0m0.085s

awk性能最佳

swich语句

swich语句作用类似bash中的case语句

语法:switch(expression) {case VALUE1 or /REGEXP/: statement1; case VALUE2 or /REGEXP2/: statement2; ...; default: statementn}

break和continue

[root@CentOS6 ~]#awk 'BEGIN{sum=0;for(i=1;i<=100;i++) {if(i%2==0)continue;sum+=i}print sum}'
2500
#利用continue语句计算1到100之间所有奇数之和
#循环内置条件判断if(i%2==0)continue对i取模如果i为偶数实行continue跳过本次循环

与bash类似awk语句中break和continue同样支持指定跳过第几层循环

break [n]

continue [n]

next: 提前结束对本行处理而直接进入下一行处理(awk自身循环)

awk -F: '{if($3%2!=0) next; print $1,$3}' /etc/passwd

[root@CentOS6 ~]#awk -F: '{if(NR%2!=0)next;print NR,$0}' /etc/passwd
#awk本身每条记录自带循环
#对行号取模如果结果非0也就是奇数行执行next,跳过该条记录,结果只打印偶数行
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync

八、awk数组

关联数组:array[index-expression]

index-expression: 数组索引、下标

(1) 可使用任意字符串;字符串要使用双引号括起来

(2) 如果某数组元素事先不存在,在引用时,awk会自动创建 此元素,并将其值初始化为“空串”

若要判断数组中是否存在某元素,要使用“index in array”格式进行遍历

若要遍历数组中的每个元素,要使用for循环

for(var in array) {for-body}

注意:var会遍历array的每个索引

[root@CentOS6 ~]#awk -F: '{line[$7]++}END{for (i in line)print i,line[i]}' /etc/passwd
#利用数组总结各个shell类型出现个次数
#-F:指定文本的字段分隔符为":",$7就是shell类型
#$7shell类型作为关联数组line的下标索引,{line[$7]++}awk每条记录的每次循环都会给line[$7]重新付一次值,每次加一
#{for (i in line)print i,line[i]} for循环,把列表line也就是数组的下标赋值给变量i
/sbin/shutdown 1
/bin/csh 1
/bin/bash 10
/sbin/nologin 29
/sbin/halt 1
/bin/sync 1
[root@CentOS6 ~]#awk '{line[$1]++}END{for (i in line)print i,line[i]}' access_log |sort -nr -k2
#利用awk中的数组取出访问日志中各个ip地址访问的次数,排序之后将异常的ip取出
#sort -nr 从大到小排序,-k2 指定排序的参考项默认分隔符为空格
172.18.125.70 155364
172.18.22.188 9367
...

利用数组去重:

[root@CentOS6 ~]#awk -F: '!line[$7]++' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
gentoo:x:501:501:Gentoo Distribution:/home/gentoo:/bin/csh
#-F:指定字段分隔符为":",$7为shell类型
#awk每条记录的循环会给line[$7]赋一次值,不同shell类型为索引的数组首次循环都为空串数组,!line[$7]++所以首次结果为真默认执行打印$0
#首次以后关联数组被赋值!line[$7]++的结果都为假,不执行打印动作

统计连接状态:

[root@CentOS6 ~]#netstat -nat |awk '/^tcp/{stat[$NF]++}END{for(i in stat)print i,stat[i]}'
ESTABLISHED 2
LISTEN 10

统计ip访问连接量

[root@CentOS6 ~]#netstat -nt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 64 172.18.45.6:22 172.18.45.107:2585 ESTABLISHED
tcp 0 0 172.18.45.6:22 172.18.45.107:4262 ESTABLISHED
#命令原始状态
[root@CentOS6 ~]#netstat -nt | awk -F'[[:space:]:]+' '/^tcp/{ip[$6]++}END{for (i in ip)print i,ip[i]}'
172.18.45.107 2
#-F'[[:sapce:]:]+' 指定空格和":"都作为字段分隔符$6就是ip地址

求男女平均分:

数组写法

[root@CentOS6 bin]#cat score.txt
mage 100 male
wang 90 male
zhang 80 female
li 100 female
[root@CentOS6 bin]#awk '{total[$3]+=$2;num[$3]++}END{for(name in total){print name,total[name],total[name]/num[name]}}' score.txt
female 180 90
male 190 95
#total[$3]+=$2 分别加总男女总分
#num[$3]++ 分别加总男女个数
#for(name in total)将total数组下标赋值给变量name
#print name为打印性别
#print total[name]为打印男女各自总分
#print total[name]/num[name]为打印平均分

变量写法:

[root@CentOS6 bin]#awk '{if($3 == "male"){msum+=$2;mnum++}else{fsum+=$2;fnum++}}END{printf "msum=%d  mavg=%.2f\nfsum=%d favg=%.2f\n",msum,msum/mnum,fsum,fsum/fnum}'  score.txt
msum=190 mavg=95.00
fsum=180 favg=90.00

九、awk函数

内置函数

数值处理:

rand():返回0和1之间一个随机数

[root@CentOS6 ~]#awk 'BEGIN{srand(); print rand() }'
0.70397
[root@CentOS6 ~]#awk 'BEGIN{srand(); print int(rand()*100) }'
62
#int(rand()*100) 原始命令生成的是小数乘以100就是生成100以内的随机数,int命令取整

字符串处理:

length([s]):返回指定字符串的长度

sub(r,s,[t]):对t字符串进行搜索r表示的模式匹配的内容,并将第一个匹 配的内容替换为s

echo "2008:08:08 08:08:08" | awk 'sub(/

awk用法总结的更多相关文章

  1. awk 用法(使用入门)

    转自:http://www.cnblogs.com/emanlee/p/3327576.html awk 用法:awk ' pattern {action} '  变量名    含义 ARGC   命 ...

  2. awk用法小结(作者总结)

    http://www.chinaunix.net/old_jh/24/691456.html http://wenku.baidu.com/view/ebac4fc658f5f61fb736664d. ...

  3. sed和awk用法

    sed和awk用法 Sed sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为 ...

  4. linux awk用法

    awk是一个强大的文本分析工具,在对数据进行分析并生成报告时显得尤为强大. 使用方法:awk [options]  'BEGIN{ commands } pattern{ commands } END ...

  5. 转shell中的awk用法详解

        awk语言的最基本功能是在文件或字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作,完整的awk脚本通常用来格式化文本文件中的信息 调用awk:   第一种,命令行方式 ...

  6. 收集整理的awk用法小结

    awk 用法:awk ‘ pattern {action} ‘ 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS 输 ...

  7. AWK 用法

     awk 用法:awk ' pattern {action} ' 变量名 含义 ARGC 命令行变元个数 ARGV 命令行变元数组 FILENAME 当前输入文件名 FNR 当前文件中的记录号 FS ...

  8. 精通awk系列(4):awk用法入门

    回到: Linux系列文章 Shell系列文章 Awk系列文章 awk用法入门 awk 'awk_program' a.txt awk示例: # 输出a.txt中的每一行 awk '{print $0 ...

  9. awk用法

    目前虽然有很多工具可以代替awk,但是呢我还是认为awk还是非常重要,比如有时候load数据到hive,mysql发现数据有点问题,这样可以先对比文件和库中数据是否一致,这样awk就发挥用处了,还有从 ...

  10. AWK用法入门详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

随机推荐

  1. xadmin入门使用

    ,官方文档:http://xadmin.readthedocs.io/en/docs-chinese/views_api.html 中文文档:https://www.kancloud.cn/net_y ...

  2. 官方Caffe-windows 配置与示例运行

    http://blog.csdn.net/guoyk1990/article/details/52909864 标签: caffewindows配置训练自己的数据 2016-10-24 13:34 1 ...

  3. Scala随记

    使用Scala首先确保本地Java 8版本,然后按照官网所说,比较流行的方式(1) sbt; (2) IDE "The most popular way to get Scala is ei ...

  4. 五、Web框架基础(2)

    Tornado 异步协程编程.(其实是异步IO而非真正的异步,从内核拷贝到用户空间的过程还是同步的) 适合用户量大.高并发,如抢票.网页游戏.在线聊天等场景:或大量HTTP持久连接,通过单TCP持久连 ...

  5. ubuntu 12.04改变源(转载)

    来源:http://blog.ubuntusoft.com/ubuntu-update-source.html#.Uq_PP9KBmxh 其它版本的修改方式相识.尽量使用原生工具来修改(见下方). 手 ...

  6. Jquery放大镜插件---imgzoom.js(原创)

    Jquery放大镜插件imgzoom能够实现图片放大的功能,便于与原图进行比较. 使用方法: 1.引入jQuery与imgzoom,imgzoom.css <link rel="sty ...

  7. MySQL 存储过程 (2)

    通过存储过程查询数据库返回条数操作 第一步:登录自定义用户建立存储过程需要调用测试用到的student表,具体操作如下 (1) 登录用户

  8. EasyPlayer iOS开源流媒体播放器中AAC解码PCM问题

    本文转自EasyDarwin开源团队成员Penggy的博客:http://www.jianshu.com/p/feeb107b6657 最近遇到在 iOS 平台上实时播放 AAC 音频数据流, 一开始 ...

  9. 统计 与 数学 induction 归纳 deduction 演绎 吴喜之老师

    “统计的思维方式是归纳(induction),也就是从数据所反映的现实得到比较一般的模型,希望以此解释数据所代表的那部分世界.这和以演绎(deduction)问哦主的数学思维方式相反,演绎是在一些人为 ...

  10. Angular中的内置指令和自定义指令

    NG中的指令,到底是什么(what)? 为什么会有(why)?以及怎样使用(how)? What: 在NG中,指令扩展HTML功能,为 DOM 元素调用方法.定义行为绑定数据等. Why: 最大程度减 ...