每天有各种繁琐事情,让自己有借口不写东西。尝试每天写点小东西,比如推荐一个库之类的。今天推荐faraday,这是一个ruby的库。
1 | conn = Faraday.new(:url => 'https://github.com') do |faraday| |
例子应该好懂,get post都有,详细咨询github =^_^=
曾因酒醉鞭名马 生怕情多累美人
每天有各种繁琐事情,让自己有借口不写东西。尝试每天写点小东西,比如推荐一个库之类的。今天推荐faraday,这是一个ruby的库。
1 | conn = Faraday.new(:url => 'https://github.com') do |faraday| |
例子应该好懂,get post都有,详细咨询github =^_^=
说起linux下的几个用的人不多的上古神器,基本会想到sed awk,这里先总结下awk的用法。
直接上实例吧
1 | $ cat netstat.txt |
从netstat命令中提取了如上信息作为用例
输出第1列和第4例
1 | awk '{print $1, $4}' netstat.txt |
再来看看awk的格式化输出,和C语言的printf没什么两样:
1 | awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",$1,$2,$3,$4,$5,$6}' netstat.txt |
再来看看如何过滤记录(下面过滤条件为:第三列的值为0 && 第6列的值为LISTEN)
1 | awk '$3==0 && $6=="LISTEN" ' netstat.txt |
其中的“==”为比较运算符。其他比较运算符:!=, >, <, >=, <=
我们来看看各种过滤记录的方式:
1 | awk ' $3>0 {print $0}' netstat.txt |
需要表头的话,我们可以引入内建变量NR:
1 | awk '$3==0 && $6=="LISTEN" || NR==1 ' netstat.txt |
加上格式化输出:
1 | awk '$3==0 && $6=="LISTEN" || NR==1 {printf "%-20s %-20s %s\n",$4,$5,$6}' netstat.txt |
说到了内建变量,我们可以来看看awk的一些内建变量:
变量 | 含义 |
---|---|
$0 | 当前记录(这个变量中存放着整个行的内容) |
$1~$n | 当前记录的第n个字段,字段间由FS分隔 |
FS | 输入字段分隔符 默认是空格或Tab |
NF | 当前记录中的字段个数,就是有多少列 |
NR | 已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。 |
FNR | 当前记录数,与NR不同的是,这个值会是各个文件自己的行号 |
RS | 输入的记录分隔符, 默认为换行符 |
OFS | 输出字段分隔符, 默认也是空格 |
ORS | 输出的记录分隔符,默认为换行符 |
FILENAME | 当前输入文件的名字 |
如果要输出行号:
1 | awk '$3==0 && $6=="ESTABLISHED" || NR==1 {printf "%02s %s %-20s %-20s %s\n",NR, FNR, $4,$5,$6}' netstat.txt |
未完待续
sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作,下面先了解一下sed的用法
sed命令行格式为:
sed [-nefri] ‘command’ 输入文本
常用选项:
-n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e∶直接在指令列模式上进行 sed 的动作编辑;
-f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;
-r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)
-i∶直接修改读取的档案内容,而不是由萤幕输出。
常用命令:
a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d ∶删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~
s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!
举例:(假设我们有一文件名为ab)
删除某行
[root@localhost ruby] # sed '1d' ab #删除第一行
[root@localhost ruby] # sed '$d' ab #删除最后一行
[root@localhost ruby] # sed '1,2d' ab #删除第一行到第二行
[root@localhost ruby] # sed '2,$d' ab #删除第二行到最后一行
显示某行
[root@localhost ruby] # sed -n '1p' ab #显示第一行
[root@localhost ruby] # sed -n '$p' ab #显示最后一行
[root@localhost ruby] # sed -n '1,2p' ab #显示第一行到第二行
[root@localhost ruby] # sed -n '2,$p' ab #显示第二行到最后一行
使用模式进行查询
[root@localhost ruby] # sed -n '/ruby/p' ab #查询包括关键字ruby所在所有行
[root@localhost ruby] # sed -n '/\$/p' ab #查询包括关键字$所在所有行,使用反斜线\屏蔽特殊含义
增加一行或多行字符串
[root@localhost ruby]# cat ab
Hello!
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed ‘1a drink tea’ ab #第一行后增加字符串”drink tea”
Hello!
drink tea
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed ‘1,3a drink tea’ ab #第一行到第三行后增加字符串”drink tea”
Hello!
drink tea
ruby is me,welcome to my blog.
drink tea
end
drink tea
[root@localhost ruby] # sed ‘1a drink tea\nor coffee’ ab #第一行后增加多行,使用换行符\n
Hello!
drink tea
or coffee
ruby is me,welcome to my blog.
end
代替一行或多行
[root@localhost ruby] # sed ‘1c Hi’ ab #第一行代替为Hi
Hi
ruby is me,welcome to my blog.
end
[root@localhost ruby] # sed ‘1,2c Hi’ ab #第一行到第二行代替为Hi
Hi
end
替换一行中的某部分
格式:sed ‘s/要替换的字符串/新的字符串/g’ (要替换的字符串可以用正则表达式)
[root@localhost ruby] # sed -n ‘/ruby/p’ ab | sed ‘s/ruby/bird/g’ #替换ruby为bird
[root@localhost ruby] # sed -n ‘/ruby/p’ ab | sed ‘s/ruby//g’ #删除ruby
插入
[root@localhost ruby] # sed -i '$a bye' ab #在文件ab中最后一行直接输入"bye"
[root@localhost ruby]# cat ab
Hello!
ruby is me,welcome to my blog.
end
bye
删除匹配行
sed -i '/匹配字符串/d' filename (注:若匹配字符串是变量,则需要“”,而不是‘’。记得好像是)
替换匹配行中的某个字符串
sed -i '/匹配字符串/s/替换源字符串/替换目标字符串/g' filename
今天看到一篇文章,很有感悟,顺笔就写点东西。
Google的I/O大会之后,“AI将无处不在,智能将无处不在”。
数据分析, 人工智能, 图像识别等趋势, 不彻底学习线性代数 信号处理 算法导论(特别重要,以前看的时候感觉有些算法就是没事找事),是无法应付的。
为什么学得不好,我前段时间看《射雕英雄传》的时候, 刚好看到郭靖在江南七怪的教导下,武功没长进,全真道长说了十个字“教而不得法,学而不得道”。
这里并不是指责说大学的老师没有良好的教授方法,主要还是自己学不知其所以然。。
这里的高等数学当然是包括 微积分 线性代数 概率统计。
《程序员的数学--线性代数》这本书,综述里有一句话。
m*n的矩阵A, 表示了从n维空间到m维空间的“映射”。具体来说就是,把n维空间中的点x(n维列向量)变换到m维空间的点(m维列向量)Ax的映射。
为什么要引入矩阵,矩阵是用来做空间变换的,矩阵是一种映射,所以要学习好矩阵的乘积。
行列式=对角线元素的乘积,但是行列式有什么意义呢?
为什么对角矩阵如何特殊,要拿出来单独讲呢?
书中以“空间变换”的角度进行了解释。一个n维向量乘以一个n*n的对角矩阵,
实际上就是把对角矩阵中的各个值直接乘到了n维向量的对应的值上,
也就是对n维空间的各个维度进行了系度拉伸。
那么这些对角元素的乘积,实际上是这个矩阵变换給n维空间带来的体积变化的倍数。
(n维空间体积=第一维长度*第二维长度……*第n维长度)
行列式的值是空间体积变化的倍数!!
接着有网友表示,他的线性代数,是看了mit的公开课才明白的,:),你感觉学的那些貌似没啥意义,自然也没有足够的兴趣,自然也学不好,线性代数教給我们的是一种方法,我们需要从更高级的学科中重新思考过它,才能看明白数学现象的本质。
对数据的处理现在普遍就是两种方案,python 或者 R。
一组学生参加了数学 科学和英语的考试。考试完成之后,需要給学生确定一个成绩衡量指标。会把综合成绩的前20%评定为A,接着是B C D F。
可以看到数据处理的一个障碍,三科成绩无法比较,或者说比较没有意义。。
:) 当然有人认为可以这么处理,比如知道数学的总分是700,将成绩全部换为以100分为计量单位的。。
当然英语也是,,计总分为50分,换成对应100的来处理。。。
也许吧,可以试试 :)
在这我们使用R来进行处理。
1 |
|
we get
1 |
|
这里有两个细节没有注意。。
一个是刚好十个学生;另外一个是貌似student单词貌似拼写错了。。
1 |
|
name <- strsplit((roster$stduent), “ “)
1 |
|
lastname <- sapply(name, “[“, 2)
firstname <- sapply(name, “[“, 1)
roster <- cbind(firstname, lastname, roster[, -1])
1 | 将原来的student化成两列,一列是姓,一列是名,同时也将student列舍弃掉。 |
roster <- roster[order(lastname, firstname),]
roster
1 |
|
roster
firstname lastname Math Science English score grade
6 Cherry Cushing 512 85 28 0.35 C
1 John Davis 502 95 25 0.56 B
9 Joel England 573 89 27 0.70 B
4 David Jones 358 82 15 -1.16 F
8 Greg Knox 625 95 30 1.34 A
5 Janice Markhammer 495 75 20 -0.63 D
3 Bully Moose 412 80 18 -0.86 D
10 Mary Rayburn 522 86 18 -0.18 C
2 Angela Willams 600 99 22 0.92 A
7 Reuven Ytzrhak 410 80 15 -1.05 F
```
Done!!!!!!