hope

A new day is coming,whether we like it or not. The question is will you control it,or will it control you?


  • Home

  • Archives

  • Code

  • Categories

  • Tags

  • Footprint

  • qRT-PCR

  • Project

  • Publish

  • SCI Figure

  • About

  • CV

  • Search

14 个 grep 命令的例子

Posted on 2015-07-29 | In Linux | Comments: | Views: ℃
| Words count in article: | Reading time ≈

概述:所有的类linux系统都会提供一个名为grep(global regular expression print,全局正则表达式输出)的搜索工具。grep命令在对一个或多个文件的内容进行基于模式的搜索的情况下是非常有用的。模式可以是单个字符、多个字符、单个单词、或者是一个句子。
当命令匹配到执行命令时指定的模式时,grep会将包含模式的一行输出,但是并不对原文件内容进行修改。

在本文中,我们将会讨论到14个grep命令的例子。

例1 在文件中查找模式(单词)在/etc/passwd文件中查找单词”linuxtechi”

1
2
3
root@Linux-world:~# grep linuxtechi /etc/passwd
linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
root@Linux-world:~#

例2 在多个文件中查找模式。

1. root@Linux-world:~# grep linuxtechi /etc/passwd /etc/shadow /etc/gshadow
2. /etc/passwd:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
3. /etc/shadow:linuxtechi:$6$DdgXjxlM$4flz4JRvefvKp0DG6re:16550:0:99999:7:::/etc/gshadow:adm:*::syslog,linuxtechi
4. /etc/gshadow:cdrom:*::linuxtechi
5. /etc/gshadow:sudo:*::linuxtechi
6. /etc/gshadow:dip:*::linuxtechi
7. /etc/gshadow:plugdev:*::linuxtechi
8. /etc/gshadow:lpadmin:!::linuxtechi
9. /etc/gshadow:linuxtechi:!::
10. /etc/gshadow:sambashare:!::linuxtechi
11. root@Linux-world:~#

例3 使用-l参数列出包含指定模式的文件的文件名。

1. root@Linux-world:~# grep -l linuxtechi /etc/passwd /etc/shadow /etc/fstab /etc/mtab
2. /etc/passwd
3. /etc/shadow
4. root@Linux-world:~#

例4 使用-n参数,在文件中查找指定模式并显示匹配行的行号

1. root@Linux-world:~# grep -n linuxtechi /etc/passwd
2. 39:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
3. root@Linux-world:~#
4. root@Linux-world:~# grep -n root /etc/passwd /etc/shadow

例5 使用-v参数输出不包含指定模式的行输出/etc/passwd文件中所有不含单词”linuxtechi”的行

1. root@Linux-world:~# grep -v linuxtechi /etc/passwd

例6 使用 ^ 符号输出所有以某指定模式开头的行Bash脚本将 ^ 符号视作特殊字符,用于指定一行或者一个单词的开始。例如输出/etc/passes文件中所有以”root”开头的行

1. root@Linux-world:~# grep ^root /etc/passwd
2. root:x:0:0:root:/root:/bin/bash
3. root@Linux-world:~#

例7 使用 $ 符号输出所有以指定模式结尾的行。输出/etc/passwd文件中所有以”bash”结尾的行。

1. root@Linux-world:~# grep bash$ /etc/passwd
2. root:x:0:0:root:/root:/bin/bash
3. linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
4. root@Linux-world:~#

Bash脚本将美元($)符号视作特殊字符,用于指定一行或者一个单词的结尾。

例8 使用 -r 参数递归地查找特定模式

1. root@Linux-world:~# grep -r linuxtechi /etc/
2. /etc/subuid:linuxtechi:100000:65536
3. /etc/group:adm:x:4:syslog,linuxtechi
4. /etc/group:cdrom:x:24:linuxtechi
5. /etc/group:sudo:x:27:linuxtechi
6. /etc/group:dip:x:30:linuxtechi
7. /etc/group:plugdev:x:46:linuxtechi
8. /etc/group:lpadmin:x:115:linuxtechi
9. /etc/group:linuxtechi:x:1000:
10. /etc/group:sambashare:x:131:linuxtechi
11. /etc/passwd-:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
12. /etc/passwd:linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
13. ............................................................................

上面的命令将会递归的在/etc目录中查找”linuxtechi”单词

例9 使用 grep 查找文件中所有的空行

1. root@Linux-world:~# grep ^$ /etc/shadow
2. root@Linux-world:~#

由于/etc/shadow文件中没有空行,所以没有任何输出

例10 使用 -i 参数查找模式grep命令的-i参数在查找时忽略字符的大小写。

我们来看一个例子,在paswd文件中查找”LinuxTechi”单词。

1. nextstep4it@localhost:~$ grep -i LinuxTechi /etc/passwd
2. linuxtechi:x:1001:1001::/home/linuxtechi:/bin/bash
3. nextstep4it@localhost:~$

例11 使用 -e 参数查找多个模式例如,我想在一条grep命令中查找’linuxtechi’和’root’单词,使用-e参数,我们可以查找多个模式。

1. root@Linux-world:~# grep -e "linuxtechi" -e "root" /etc/passwd
2. root:x:0:0:root:/root:/bin/bash
3. linuxtechi:x:1000:1000:linuxtechi,,,:/home/linuxtechi:/bin/bash
#或者
4. root@Linux-world:~# grep -E "(Olfr1413|Olfr1411)" Mus_musculus.GRCm38.75_chr1_genes.txt
ENSMUSG00000058904      Olfr1413
ENSMUSG00000062497      Olfr1411
#或者
grep 'usrquota\|grpquota' /etc/fstab

例12 使用 -f 用文件指定待查找的模式首先,在当前目录中创建一个搜索模式文件”grep_pattern”,我想文件中输入的如下内容。

1. root@Linux-world:~# cat grep_pattern
2. ^linuxtechi
3. root
4. false$
5. root@Linux-world:~#

现在,试试使用grep_pattern文件进行搜索

1. root@Linux-world:~# grep -f grep_pattern /etc/passwd

例13 使用 -c 参数计算模式匹配到的数量继续上面例子,我们在grep命令中使用-c命令计算匹配指定模式的数量

1. root@Linux-world:~# grep -c -f grep_pattern /etc/passwd
2. 22
3. root@Linux-world:~#

例14 输出匹配指定模式行的前或者后面N行

a)使用-B参数输出匹配行的前4行

1. root@Linux-world:~# grep -B 4 "games" /etc/passwd

b)使用-A参数输出匹配行的后4行

1. root@Linux-world:~# grep -A 4 "games" /etc/passwd

c)使用-C参数输出匹配行的前后各4行

1. root@Linux-world:~# grep -C 4 "games" /etc/passwd

例15 -E参数用扩展的正则表达式

列出当前目录下包含 s..s 的文件名,\1为反向引用()中内容,如下例子中等同于s。

ls | grep -E '(s).+\1'

例16 组分隔符

‘—group-separator=STRING’
当使用’-A’, ‘-B’ or ‘-C’时,使用STRING替代默认的组分隔符。

(注:组分隔符表示匹配到的内容的上下文。例如”-A 2”,在某行匹配到时,还将输出后两行,这是一个组。下一次匹配成功时,如果是在该组之后行匹配上的,则这两组中间默认使用”—“分隔)

‘—no-group-separator’
当使用’-A’, ‘-B’ or ‘-C’时,不输出任何组分隔符,而是将不同组相邻输出。

用于比较两个文件不同的行差集

Posted on 2015-07-29 | In Bioinformatics | Comments: | Views: ℃
| Words count in article: | Reading time ≈

这个脚本用于求两个文件不同的行所构成的差集,即A中存在而B中不存在的行,及B中存在而A中不存在的行.
代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/usr/bin/perl -w
use strict;

my ($fileA,$fileB) = @ARGV;

open A,'<',$fileA or die "Unable to open file:$fileA:$!";
my %ta;
my $i;
while(<A>){
chomp;
$ta{$_} = ++$i;
}

close A;

open B,'<',$fileB or die "Unable to open file:$fileB:$!";
my @B;
while(<B>){
chomp;
unless (defined $ta{$_}){
push @B,$_;
}else{
$ta{$_} = 0;
}
}
close B;

# Output diff to different files respectively

open DIFF_A, ">$fileA.diff" or die "Unable to create diff file for $fileA:$!";
my $countA;
print "Remain in files $fileA\n";
my %tt = reverse %ta;

foreach (keys %tt) {
$countA += $_>0? print DIFF_A $tt{$_}."\n":0;
}

print "$countA lines\n";

close DIFF_A;

open DIFF_B, ">$fileB.diff" or die "Unable to create diff file for $fileB:$!";
my $countB = scalar @B;
print DIFF_B $_."\n" foreach @B;

if ($countA == 0 and $countB ==0 ){
print STDOUT "The two files are identical\n";
}

close DIFF_B;

如何向google提交sitemap

Posted on 2015-07-29 | In Hexo | Comments: | Views: ℃
| Words count in article: | Reading time ≈

Sitemap 可方便管理员通知搜索引擎他们网站上有哪些可供抓取的网页。向google提交自己hexo博客的sitemap有助于让别人更好地通过google搜索到自己的博客。
下面来说一下具体步骤:

第一步 生成自己的sitemap文件:xml-sitemaps.


生成后点击红框那下载自己的sitemaps.xml文件

第二步 向google提交你的网页

用自己的google帐号登陆Webmaster Central的网页

1
https://www.google.com/webmasters/verification/home?hl=en

点击ADD A SITE
输入网页url点击continue

第三步 google验证网页所有权

进入验证所有权的页面
可以选择上传一个html文件到你的网页的方式来验证
如下图


也可以选择其他方法也就是html tag
如下图

大致的意思就是在主页的head里面加一条meta标签
在自己的主页加了google指定的meta标签以后
回来此页点击verify按钮即完成验证

第四步 google网站站长上传sitemap

点击以下链接

1
https://www.google.com/webmasters/tools

由于之前在第2步已经向google提交了你的网页
所以这里能看到自己网页的缩略图

这里直接点击红色框的部分
就会进入site dashboard
点击sitemap这一项
进入后点击ADD/TEST SITEMAP这个按钮
然后输入你的sitemap.xml的link
按submit sitemap按钮即可
下面就会告诉你有多少个url被indexed

第五步 测试sitemaps

点击 Test Sitemap 进行测试


测试成功结果如下:

PCA分析

Posted on 2015-07-29 | In Bioinformatics | Comments: | Views: ℃
| Words count in article: | Reading time ≈

主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量称为主成分,它们是观测变量的线性组合。如第一主成分为:
PC1=a1X1=a2X 2+…+akXk
它是k个观测变量的加权组合,对初始变量集的方差解释性最大。第二主成分也是初始变量的线性组合,对方差的解释性排第二,同时与第一主成分正交(不相关)。后面每一个主成分都最大化它对方差的解释程度,同时与之前所有的主成分都正交。
PCA分析模型如下图:

例如如下数据的PCA分析:
学生身体4 项指标的主成份分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
学生序号	x1身高	x2体重	x3胸围	x4坐高
1 148 41 72 78
2 139 34 71 76
3 160 49 77 86
4 149 36 67 79
5 159 45 80 86
6 142 31 66 76
7 153 43 76 83
8 150 43 77 79
9 151 42 77 80
10 139 31 68 74
11 140 29 64 74
12 161 47 78 84
13 158 49 78 83
14 140 33 67 77
15 137 31 66 73
16 152 35 73 79
17 149 47 82 79
18 145 35 70 77
19 160 47 74 87
20 156 44 78 85
21 151 42 73 82
22 147 38 73 78
23 157 39 68 80
24 147 30 65 75
25 157 48 80 88
26 151 36 74 80
27 144 36 68 76
28 141 30 67 76
29 139 32 68 73
30 148 38 70 78

数据读入R软件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
> d=read.table("clipboard",header=T)
> d
x1身高 x2体重 x3胸围 x4坐高
1 148 41 72 78
2 139 34 71 76
3 160 49 77 86
4 149 36 67 79
5 159 45 80 86
6 142 31 66 76
7 153 43 76 83
8 150 43 77 79
9 151 42 77 80
10 139 31 68 74
11 140 29 64 74
12 161 47 78 84
13 158 49 78 83
14 140 33 67 77
15 137 31 66 73
16 152 35 73 79
17 149 47 82 79
18 145 35 70 77
19 160 47 74 87
20 156 44 78 85
21 151 42 73 82
22 147 38 73 78
23 157 39 68 80
24 147 30 65 75
25 157 48 80 88
26 151 36 74 80
27 144 36 68 76
28 141 30 67 76
29 139 32 68 73
30 148 38 70 78

原始数据标准化

1
> sd=scale(d)

标准化数据展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
> sd
x1身高 x2体重 x3胸围 x4坐高
[1,] -0.1366952 0.35602486 -0.04530114 -0.31999814
[2,] -1.3669516 -0.72752905 -0.23944887 -0.78828809
[3,] 1.5036468 1.59437218 0.92543751 1.55316168
[4,] 0.0000000 -0.41794222 -1.01603978 -0.08585316
[5,] 1.3669516 0.97519852 1.50788070 1.55316168
[6,] -0.9568661 -1.19190930 -1.21018751 -0.78828809
[7,] 0.5467806 0.66561169 0.73128978 0.85072675
[8,] 0.1366952 0.66561169 0.92543751 -0.08585316
[9,] 0.2733903 0.51081827 0.92543751 0.14829182
[10,] -1.3669516 -1.19190930 -0.82189205 -1.25657805
[11,] -1.2302564 -1.50149613 -1.59848297 -1.25657805
[12,] 1.6403419 1.28478535 1.11958524 1.08487173
[13,] 1.2302564 1.59437218 1.11958524 0.85072675
[14,] -1.2302564 -0.88232247 -1.01603978 -0.55414311
[15,] -1.6403419 -1.19190930 -1.21018751 -1.49072302
[16,] 0.4100855 -0.57273564 0.14884659 -0.08585316
[17,] 0.0000000 1.28478535 1.89617616 -0.08585316
[18,] -0.5467806 -0.57273564 -0.43359660 -0.55414311
[19,] 1.5036468 1.28478535 0.34299432 1.78730666
[20,] 0.9568661 0.82040510 1.11958524 1.31901671
[21,] 0.2733903 0.51081827 0.14884659 0.61658177
[22,] -0.2733903 -0.10835539 0.14884659 -0.31999814
[23,] 1.0935613 0.04643802 -0.82189205 0.14829182
[24,] -0.2733903 -1.34670271 -1.40433524 -1.02243307
[25,] 1.0935613 1.43957876 1.50788070 2.02145164
[26,] 0.2733903 -0.41794222 0.34299432 0.14829182
[27,] -0.6834758 -0.41794222 -0.82189205 -0.78828809
[28,] -1.0935613 -1.34670271 -1.01603978 -0.78828809
[29,] -1.3669516 -1.03711588 -0.82189205 -1.49072302
[30,] -0.1366952 -0.10835539 -0.43359660 -0.31999814
attr(,"scaled:center")
x1身高 x2体重 x3胸围 x4坐高
149.00000 38.70000 72.23333 79.36667
attr(,"scaled:scale")
x1身高 x2体重 x3胸围 x4坐高
7.315548 6.460223 5.150717 4.270858

读取标准化数据

1
> d=read.table("clipboard",header=T)

主成分分析

1
> pca=princomp(d,cor=T)

碎石图

1
2
> screeplot(pca,type="line",main="碎石图",lwd=2)
>


主成分1贡献率较高

求相关矩阵

1
> dcor=cor(d)

输出

1
2
3
4
5
6
> dcor
x1身高 x2体重 x3胸围 x4坐高
x1身高 1.0000000 0.8631621 0.7321119 0.9204624
x2体重 0.8631621 1.0000000 0.8965058 0.8827313
x3胸围 0.7321119 0.8965058 1.0000000 0.7828827
x4坐高 0.9204624 0.8827313 0.7828827 1.0000000

求相关矩阵的特征向量 特征值

1
> deig=eigen(dcor)

输出

1
2
3
4
5
6
7
8
9
>deig
$values
[1] 3.54109800 0.31338316 0.07940895 0.06610989
$vectors
[,1] [,2] [,3] [,4]
[1,] -0.4969661 0.5432128 -0.4496271 0.5057471
[2,] -0.5145705 -0.2102455 -0.4623300 -0.6908436
[3,] -0.4809007 -0.7246214 0.1751765 0.4614884
[4,] -0.5069285 0.3682941 0.7439083 -0.2323433

输出特征值

1
2
3
4
5
> deig$values
[1] 3.54109800 0.31338316 0.07940895 0.06610989
> sumeigv=sum(deig$values)
> sumeigv
[1] 4

求前2个主成分的累积方差贡献率

1
2
3
4
> sum(deig$value[1:2])/4
[1] 0.9636203
> sum(deig$value[1:1])/4
[1] 0.8852745

第一主成份有88.53%的方差贡献率,前两个主成份累计贡献率更高达96.36%,故只需前两个主成份就能很好地概括这组数据.

输出前两个主成分的载荷系数(特征向量)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
> pca$loadings[,1:2]
Comp.1 Comp.2
x1身高 -0.4969661 0.5432128
x2体重 -0.5145705 -0.2102455
x3胸围 -0.4809007 -0.7246214
x4坐高 -0.5069285 0.3682941

-----------------------------------------

z1=-0.4969661 x1+-0.5145705 x2 +-0.4809007x3+-0.5069285x4

z2=0.5432128 x1+-0.2102455 x2 +-0.7246214x3+0.3682941x4

z= 3.54109800/4 z1 + 0.31338316/4 z2=0.8852745 z1 +0.07834579 Z2

=0.8852745(-0.4969661 x1+-0.5145705 x2 +-0.4809007x3+-0.5069285x4)

+0.07834579 (0.5432128 x1+-0.2102455 x2 +-0.7246214x3+0.3682941x4)



-----------------------------------------

计算主成分C1和C2的系数b1 和b2:

1
2
3
> deig$values[1]/4;deig$values[2]/4
[1] 0.8852745
[1] 0.07834579

综合得分函数C 为:

1
C=(b1*C1+b2*C2)/(b1+b2)=0.9187*C1+0.0813*C2

输出前2 个主成分的得分

1
> s=pca$scores[,1:2]

计算综合得分

1
2
3
4
5
6
7
8
> c=s[1:30,1]*0.918696+s[1:30,2]*0.0813

> s[1:30,1]
[1] 0.06990950 1.59526340 -2.84793151 0.75996988 -2.73966777 2.10583168
[7] -1.42105591 -0.82583977 -0.93464402 2.36463820 2.83741916 -2.60851224
[13] -2.44253342 1.86630669 2.81347421 0.06392983 -1.55561022 1.07392251
[19] -2.52174212 -2.14072377 -0.79624422 0.28708321 -0.25151075 2.05706032
[25] -3.08596855 -0.16367555 1.37265053 2.16097778 2.40434827 0.50287468

输出综合得分信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
> cbind(s,c)
Comp.1 Comp.2 c
[1,] 0.06990950 -0.23813701 0.04486504
[2,] 1.59526340 -0.71847399 1.40715017
[3,] -2.84793151 0.38956679 -2.58471151
[4,] 0.75996988 0.80604335 0.76371262
[5,] -2.73966777 0.01718087 -2.51552502
[6,] 2.10583168 0.32284393 1.96086635
[7,] -1.42105591 -0.06053165 -1.31043961
[8,] -0.82583977 -0.78102576 -0.82219309
[9,] -0.93464402 -0.58469242 -0.90618922
[10,] 2.36463820 -0.36532199 2.14268298
[11,] 2.83741916 0.34875841 2.63507969
[12,] -2.60851224 0.21278728 -2.37913015
[13,] -2.44253342 -0.16769496 -2.25757928
[14,] 1.86630669 0.05021384 1.71865087
[15,] 2.81347421 -0.31790107 2.55888214
[16,] 0.06392983 0.20718448 0.07557617
[17,] -1.55561022 -1.70439674 -1.56770034
[18,] 1.07392251 -0.06763418 0.98110965
[19,] -2.52174212 0.97274301 -2.23763039
[20,] -2.14072377 0.02217881 -1.96487123
[21,] -0.79624422 0.16307887 -0.71824807
[22,] 0.28708321 -0.35744666 0.23468178
[23,] -0.25151075 1.25555188 -0.12898555
[24,] 2.05706032 0.78894494 1.95395431
[25,] -3.08596855 -0.05775318 -2.83976229
[26,] -0.16367555 0.04317932 -0.14685759
[27,] 1.37265053 0.02220972 1.26285420
[28,] 2.16097778 0.13733233 1.99644676
[29,] 2.40434827 -0.48613137 2.16934265
[30,] 0.50287468 0.14734317 0.47396795
>

排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
[11,]	2.83741916	0.34875841	2.63507969
[15,] 2.81347421 -0.31790107 2.55888214
[29,] 2.40434827 -0.48613137 2.16934265
[10,] 2.3646382 -0.36532199 2.14268298
[28,] 2.16097778 0.13733233 1.99644676
[6,] 2.10583168 0.32284393 1.96086635
[24,] 2.05706032 0.78894494 1.95395431
[14,] 1.86630669 0.05021384 1.71865087
[2,] 1.5952634 -0.71847399 1.40715017
[27,] 1.37265053 0.02220972 1.2628542
[18,] 1.07392251 -0.06763418 0.98110965
[4,] 0.75996988 0.80604335 0.76371262
[30,] 0.50287468 0.14734317 0.47396795
[22,] 0.28708321 -0.35744666 0.23468178
[16,] 0.06392983 0.20718448 0.07557617
[1,] 0.0699095 -0.23813701 0.04486504
[23,] -0.25151075 1.25555188 -0.12898555
[26,] -0.16367555 0.04317932 -0.14685759
[21,] -0.79624422 0.16307887 -0.71824807
[8,] -0.82583977 -0.78102576 -0.82219309
[9,] -0.93464402 -0.58469242 -0.90618922
[7,] -1.42105591 -0.06053165 -1.31043961
[17,] -1.55561022 -1.70439674 -1.56770034
[20,] -2.14072377 0.02217881 -1.96487123
[19,] -2.52174212 0.97274301 -2.23763039
[13,] -2.44253342 -0.16769496 -2.25757928
[12,] -2.60851224 0.21278728 -2.37913015
[5,] -2.73966777 0.01718087 -2.51552502
[3,] -2.84793151 0.38956679 -2.58471151
[25,] -3.08596855 -0.05775318 -2.83976229

根据一个ID列表文件从一个fasta文件里面挑取符合要求的序列

Posted on 2015-07-29 | In Bioinformatics | Comments: | Views: ℃
| Words count in article: | Reading time ≈

其中一个文件是ID列表,一个ID占一行,另一个文件是fasta格式的序列,一行是>开头的标记,旗下所有行都是该标记的内容,直到下一个>开头的标记

Perl代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/usr/bin/perl -w 
if( @ARGV != 2 )
{
print "Usage: we need two files\n";
exit 0;
}
my $ID=shift @ARGV;
my $fasta=shift @ARGV;
open FH1,"<$ID" or die "can not open the file,$!";
while (<FH1>)
{
chomp;
$hash{$_}=1;
}
#读取第一个参数,ID列表,每一行的ID都扫描进去hash表
open FH2,"$fasta" or die "can not open the file,$!";
while(defined($line=<FH2>))
{
chomp $line;
if($line =~ />/)
{
$key = (split /\s/,$line)[0];
$key =~ s/>//g;
$flag = exists $hash{$key}?1:0;
}#这个flag是用来控制这个标记下面的序列是否输出

print $line."\n" if $flag == 0;

}

RStudio

Posted on 2015-07-29 | In R | Comments: | Views: ℃
| Words count in article: | Reading time ≈

RStudio is an integrated development environment (IDE) for R. It includes a console, syntax-highlighting editor that supports direct code execution, as well as tools for plotting, history, debugging and workspace management.

Publish to RPubs

Getting Started with RPubs

RStudio lets you harness the power of R Markdown to create documents that weave together your writing and the output of your R code. And now, with RPubs, you can publish those documents on the web with the click of a button!

Prerequisites

You’ll need R itself, RStudio (v0.96.230 or later), and the knitr package (v0.5 or later).

Instructions

In RStudio, create a new R Markdown document by choosing File | New | R Markdown.
Click the Knit HTML button in the doc toolbar to preview your document.
In the preview window, click the Publish button.

Results:

Convergence testing

1
2
3
4
5
6
7
8
library(lattice)
library(lme4)
library(blme)
library(reshape2)
library(ggplot2); theme_set(theme_bw())
library(gridExtra) ## for grid.arrange
library(bbmle) ## for slice2D; requires *latest* r-forge version (r121)
source("allFit.R")

Load data:

1
dList <- load("data.RData")

Spaghetti plot: don’t see much pattern other than (1) general increasing trend; (2) quantized response values (table(dth$Estimate) or unique(dth$Estimate) also show this); (3) skewed residuals

1
sort(unique(dth$Estimate))

1
2
##  [1]  0.0  0.5  1.0  1.5  2.0  2.5  3.0  4.0  5.0  6.0  7.0  7.5  8.0 10.0
## [15] 12.0 15.0 17.0 20.0 25.0 30.0 35.0 40.0 50.0 60.0 70.0 75.0 90.0
1
2
3
(p0 <- ggplot(dth,aes(Actual,Estimate))+geom_point()+
geom_line(aes(group=factor(pid)))+
stat_summary(fun.y=mean,geom="line",colour="red",lwd=2))

全基因组重测序数据分析(Whole genomr Resequencing Analysis)

Posted on 2015-07-29 | In Bioinformatics | Comments: | Views: ℃
| Words count in article: | Reading time ≈

简介(Introduction)

通过高通量测序识别发现de novo的somatic和germ line 突变,结构变异-SNV,包括重排突变(deletioin, duplication 以及copy number variation)以及SNP的座位;针对重排突变和SNP的功能性进行综合分析;我们将分析基因功能(包括miRNA),重组率(Recombination)情况,杂合性缺失(LOH)以及进化选择与mutation之间的关系;以及这些关系将怎样使得在disease(cancer)genome中的mutation产生对应的易感机制和功能。我们将在基因组学以及比较基因组学,群体遗传学综合层面上深入探索疾病基因组和癌症基因组。

实验设计与样本

(1)Case-Control 对照组设计 ;
(2)家庭成员组设计:父母-子女组(4人、3人组或多人);

初级数据分析

1.数据量产出: 总碱基数量、Total Mapping Reads、Uniquely Mapping Reads统计,测序深度分析。
2.一致性序列组装:与参考基因组序列(Reference genome sequence)的比对分析,利用贝叶斯统计模型检测出每个碱基位点的最大可能性基因型,并组装出该个体基因组的一致序列。
3.SNP检测及在基因组中的分布:提取全基因组中所有多态性位点,结合质量值、测序深度、重复性等因素作进一步的过滤筛选,最终得到可信度高的SNP数据集。并根据参考基因组信息对检测到的变异进行注释。
4.InDel检测及在基因组的分布: 在进行mapping的过程中,进行容gap的比对并检测可信的short InDel。在检测过程中,gap的长度为1~5个碱基。对于每个InDel的检测,至少需要3个Paired-End序列的支持。
5.Structure Variation检测及在基因组中的分布: 能够检测到的结构变异类型主要有:插入、缺失、复制、倒位、易位等。根据测序个体序列与参考基因组序列比对分析结果,检测全基因组水平的结构变异并对检测到的变异进行注释。

高级数据分析

1.测序短序列匹配(Read Mapping)

(1)屏蔽掉Y染色体上假体染色体区域(pseudo-autosomal region), 将Read与参考序列NCBI36进行匹配(包括所有染色体,未定位的contig,以及线粒体序列mtDNA(将用校正的剑桥参考序列做替代))。采用标准序列匹配处理对原始序列文件进行基因组匹配, 将Read与参考基因组进行初始匹配;给出匹配的平均质量得分分布;
(2)碱基质量得分的校准。我们采用碱基质量校准算法对每个Read中每个碱基的质量进行评分,并校准一些显著性误差,包括来自测序循环和双核苷酸结构导致的误差。
(3)测序误差率估计。 pseudoautosomal contigs,short repeat regions(包括segmental duplication,simple repeat sequence-通过tandem repeat识别算法识别)将被过滤;

2.SNP Calling 计算 (SNP Calling)

我们可以采用整合多种SNP探测算法的结果,综合地,更准确地识别出SNP。通过对多种算法各自识别的SNP进行一致性分析,保留具有高度一致性的SNP作为最终SNP结果。这些具有高度一致性的SNP同时具有非常高的可信度。在分析中使用到的SNP识别算法包括基于贝叶斯和基因型似然值计算的方法,以及使用连锁不平衡LD或推断技术用于优化SNP识别检出的准确性。

统计SNV的等位基因频率在全基因组上的分布
稀有等位基因数目在不同类别的SNV中的比率分布(a);SNV的类别主要考虑:(1)无义(nonsense),(2)化学结构中非同义,(3)所有非同义,(4)保守的非同义,(5)非编码,(6)同义,等类型SNV; 另外,针对保守性的讨论,我们将分析非编码区域SNV的保守型情况及其分布(图a, b)


3.短插入/缺失探测(Short Insertion /Deletion (Indel)Call)

(1). 计算全基因组的indel变异和基因型检出值的过程
计算过程主要包含3步:(1)潜在的indel的探测;(2)通过局部重匹配计算基因型的似然值;(3)基于LD连锁不平衡的基因型推断和检出识别。Indel在X,Y染色体上没有检出值得出。
(2). Indel 过滤处理

4.融合基因的发现(Fusion gene Discovery)

选择注释的基因信息来自于当前最新版本的Ensemble Gene数据库,RefSeq数据库和Vega Gene数据库。下面图例给出的是融合基因的形成,即来自不同染色体的各自外显子经过重组形成融合基因的模式图。

5.结构变异(Structure Variation)

结构变异(Structure Variation-SV)是基因组变异的一类主要来源,主要由大片段序列(一般>1kb)的拷贝数变异(copy number variation, CNV)以及非平衡倒位(unbalance inversion)事件构成。目前主要一些基因组研究探测识别的SV大约有20,000个(DGV数据库)。在某些区域上,甚至SV形成的速率要大于SNP的速率,并与疾病临床表型具有很大关联。我们不仅可以通过测序方式识别公共的SV,也可以识别全新的SV。全新的SV的生成一般在germ line和突变机制方面都具有所报道。然而,当前对SV的精确解析需要更好的算法实现。同时,我们也需要对SV的形成机制要有更重要的认知,尤其是SV否起始于祖先基因组座位的插入或缺失,而不简单的根据等位基因频率或则与参考基因组序列比对判断。SV的功能性也结合群体遗传学和进化生物学结合起来,我们综合的考察SV的形成机制类别。

SV形成机制分析,包括以下几种可能存在的主要机制的识别发现:
(A)同源性介导的直系同源序列区段重组(NAHR);
(B)与DNA双链断裂修复或复制叉停顿修复相关的非同源重组(NHR);
(C)通过扩展和压缩机制形成可变数量的串联重复序列(VNTR);
(D)转座元件插入(一般主要是长/短间隔序列元件LINE/SINE或者伴随TEI相关事件的两者的组合)。
结构变异探测和扩增子(Amplicon)的探测与识别分析:如下图所示


6.测序深度分析

测序深度分析就是指根据基因组框内覆盖度深度与期望覆盖度深度进行关联,并识别出SV。我们也将采用不同算法识别原始测序数据中的缺失片段(deletion)和重复片段(duplication)。

7.SV探测识别结果的整合与FDR推断(可选步骤)

(1). PCR或者芯片方式验证SV
(2). 计算FDR-错误发现率(配合验证试验由客户指定)
(3) 筛选SV检出结果用于SV的合并和后续分析:我们通过不同方式探测识别SV的目的极大程度的检出SV,并且降低其FDR(<=10%)。通过下属筛选方法决定后续分析所使用到的SV集合。每种SV探测识别算法得到的SV的FDR要求小于10%,并将各自符合条件的SV合并;对于FDR大于10% 的算法计算识别的SV结果,如果有PCR和芯片平台验证数据,同样可以纳入后续SV分析中。最后,针对不同算法得到的SV,整合处理根据breakpoint断点左右重合覆盖度的置信区间来评定;

8.变异属性分析

(1) neutral coalescent分析
测序数据可以探测到低频率的变异体(MAF<=5%)。根据来自群体遗传学理论(neutral coalescent理论)的期望值可以计算低频度变异的分布。我们用不同等位基因频率下每Mb变异数目与neutral coalescent 选择下的期望值比值,即每Mb 基因组windows内的theta观测值,来刻画和反映自然纯化选择与种群(cancer cell-line可以特定的认为是可以区分的种群)增长速率。该分布分别考察SNP(蓝色线),Indel(红色线),具有基因型的大片段缺失(黑色线),以及外显子区域上的 SNP(绿色线)在不同等位基因频率区间上的theta情况(参见下图)。

(2). 全新变异体(novel variant)的等位基因频率和数量分布
分析对象包括全新预测的SNP,indel,large deletion, 以及外显子SNP在每个等位基因频率类别下的数目比率(fraction)(参见下图);全新预测是指预测分析结果与dbSNP(当前版本129)以及deletion数据库dbVar(2010年6月份版本)和已经发表的有关indels研究的基因组数据经过比较后识别确定的全新的SNP,indel以及deletion。dbSNP包含SNP和indels; dbVAR包含有deletion,duplication,以及mobile element insertion。dbRIP以及其他基因组学研究(JC Ventrer 以及Watson 基因组,炎黄计划亚洲人基因组)结果提供的short indels和large deletion。

(3). 变异体的大小分布以及新颖性分布

计算SNP,Deletion,以及Insertion 大小分布;计算SNP,Deletion,以及Insertion中属于全新预测结果的数目占已有各自参考数据库数目的比例(相对于dbSNP数据库;dbSNP包含SNP和indels;dbVAR包含有deletion,duplication,以及mobile element insertion。dbRIP以及其他基因组学研究(JC Ventrer 以及Watson 基因组,炎黄计划亚洲人基因组)结果提供的short indels和large deletion)其中,可以给出LINE,Alu的特征位置。

(4). 结构变异SV的断点联结点(BreakPoint Junction)分析
根据SV不同检出结果经过一些列筛选步骤构建所有结构变异SV的断点联结点数据库,保留长度大于等于50bp的SV;分析断点联结点处具有homology或者microhomology的SV;并将同一染色体,起始和终止位置坐标下的不同SV进行去冗余处理。

分析识别SV 的断点联结点(Breakpoint): 将Breakpoint按照可能形成的方式可以分类为以下几类:
(a)非等位基因同源重组型(non-allelic homologous recombination-NAHR);
(b)非同源重组(nonhomologous recombination-NHR),包括nonhomologous end-joining (NHEJ)和fork stalling /template switching(FoSTeS/MMBIR);
(c)可变串联重复(VNTR)
(d)转座插入元件(TEI)。

图 C

SV形成偏好性分析
分析SV形成机制与断裂点临近区域序列的关系,包括染色质界标(端粒,中心粒),重组高发热点区域,重复序列以及GC含量,短DNA motif和微同源区域(microhomology region)。

9.突变率估计

针对以家庭成员为单位的测序方案,我们主要探测de novo的突变(DNM);通过采用不同的方法/算法,我们给出每个家庭一份推断的DNM报表;

(1) 根据基因型推断结果,分别对每人每碱基位置上的de novo突变进行综合度量;
(2) 采用贝叶斯方法计算家庭组设计中DNM的后验概率

10.SNP,SNV功能分析与注释

(1). 祖先等位基因的注释
通过将人类(NCBI36),黑猩猩(chimpanzee2.1),猩猩(PPYG2)以及恒河猴(MMUL1)4种基因组进行基因组比对,发现保守的序列区域,计算祖先等位基因;以及duplication/deletion事件的进化分析。
(2). 分析基因结构序列上不同区域的多样性(Diversity)与分歧进化(divergence)
根据基因型分析结果计算基因结构序列上的多样性程度,即杂合度(heterozygosity); 杂合度指标可以说明选择效应的存在以及局部变异的结构分布特征模式。我们将考虑基因5’UTR上游200bp ,5’UTR ,第一个外显子,第一个内含子,中间外显子,中间内含子,最末外显子和内含子,以及3’UTR及其下游200bp区域左右考察的范围(参见下图a)。 分析编码转录本的起始/终止位置临近区域的多样性和进化分歧度(参见下图b)。

(3). 疾病变异体探测
将样本测序中分析得到SV与HGMD疾病变异体数据进行比对,得到交叉记录的错义和无义的SNP;通过将HGMD疾病关联突变与CUI(疾病概念分类标识数据库)比对获得HGMD中所有SV的疾病表型,并获得HGMD与测序数据分析得到的SV的疾病表型;并通过Fisher检验和Bonferroni多重假设检验校正计算样本SV所富集的疾病表型。

(4). 拷贝数变异CNV所含基因的功能注释
将CNV是否覆盖区段重复SD区域分类为2大类,每类CNV的所含基因的功能富集情况计算,显著性在横轴表示;各种显著性功能在纵轴表示。

(5). 变异的功能性分析与注释
(a). SNP, Indels以及大的结构变异SV的功能注释;
(b). 对包含翻译起始注释信息的转录本编码区上的SNP分类为:同义SNP,非同义SNP和无义SNP(引入终止子),干扰终止子的SNP,以及干扰剪接位点的SNP;为了降低假阳性,我们采用严格的筛选方式过滤来自indels的错误;
(c).对错义编码区突变的功能性分析: 通过信息学分析算法评估相对于生殖系变异的体细胞突变对蛋白质的结构和功能的影响效应。

(6). SNV,SNP与miRNA研究之间的关联分析
miRNA是起重要的调控作用的小分子,我们将对miRNA的pri-mRNA,pre-miRNA以及miRNA靶基因序列进行分析,识别潜在的SNP功能位点。据文献研究提供证据表明Human pre-miRNA的二级结构中存在不同位置上的SNP,我们将通过热力学稳定性分析方法评估SNP对pre-miRNA结构的影响;另外,我们也将对miRNA-Target靶基因相互作用位点做分析,评估对SNP对靶基因靶向性的影响。

(7). SNV,SNP与GWAS研究之间的关联分析
分析GWAS研究中得到的易感基因在基因组上不同坐标上的OR值分布情况; 将当前已知的GWAS研究成果与SNP进行比较;根据LD连锁不平衡将SNP与易感基因的关系进行深入讨论;直接与间接关联方法可以分别识别与表型相关的SNP,对于不易获得(missing)和定位的SNP,通过LD连锁不平衡推断疾病易感基因突变座位。

(8) 生物学通路(代谢通路,信号通路)分析
生物学通路(Biological pathway),包括代谢通路和信号转导通路是生物功能的重要组成部分,我们将各种形式的突变、变异,包括SNV和SNP,的对应基因放到生物学通路中进行综合分析,考察功能性突变对pathway的影响程度和影响的规律。通过GSEA(配合芯片表达谱数据),KS检验,超几何分布检验等方法对变异基因在某些pathway的富集程度进行排序,识别发生功能改变的潜在通路。

(9). 蛋白质-蛋白质相互作用(PPI)网络分析
蛋白质相互作用也是生物分子功能增益和缺失的重要途径,因此我们针对蛋白质相互作用网络中的突变的蛋白及其收到影响的网络节点蛋白进行系统分析,并对收到影响的网络子结构进行功能注释分析和聚类富分析。我们采用网络分析算法对由于各种突变所受到影响的子网络(subnetwork)进行功能富集度的分析;

(10). 顺式基因调控网络模块(CRM)分析

(a) 启动子序列分析
包括动子区域上的Motif预测,并与已知转录因子数据库TRANSFAC和JASPAR中的TFBS结合位点进行比对;
启动子区域上保守性分析,分析突变位置和保守性区域的关联;
(b) 计算全基因组保守性。确定TFBS的保守性以及mutation位置的保守性;

(11)重排(arrangements)与突变(mutation)的全基因组统计

(a). 体细胞(somatic)和生殖系(germline)重排(arrangements)

体细胞突变是相对于germ line 突变的一类需要重要分析的内容,我们针对Case-control设计的测序方案可以分别分析突变的情况,包括SNV,indel,以及CNV;如果仅在tumor/disease(Case组)出现而不在normal(对照组)出现的突变我们可以认为是somatic体细胞突变。将somatic mutation 与dbSNP数据库比对可以发现潜在的全新的突变和有记录的突变位置。然后,将突变分别比对到基因区域和非基因区域。基因区域具体包括:内含子区,UTR,剪接位点区和外显子区。其中外显子区分别统计:同义(synonymous),缺失(deletion),阅读框移位(frameshift),插入(insertion),错义(missense),无义(nonsense)以及非编码蛋白外显子(non-protein coding exon)等不同类型。综合不同方面分析的结果,并按照突变分类给出各重排(arrangements)类型:SNV,CNV的数目统计数据表(参见下图) 。对每一测序样本分别进行标注,包括体细胞突变和生殖系突变。

(b) 全基因组全局重排分布特征分析

主要将(a)染色体间和染色体内部的结构变异,(b)杂合体缺失(LOH)与等位基因不平衡的状况,(c)拷贝数变异(增益或者缺失)以及高可信度的SNV(在1Mb间隔区间统计)等不同情况配合染色体核型在环状图的不同层次上分别的表示出来(参见下图例对应a-d)

(c) 单核苷酸突变趋势与模式分析

分别统计在体细胞和生殖系细胞水平上的transversion的主要形式与各自所占比重(a);如果有表达谱数据,可以分析表达基因与非表达基因所分别具有的突变重排数目或者种类(b);转录起始位点上游区域的体细胞变异,生殖系germline变异以及随机变异的各自数目统计(c)和已知210种的不同肿瘤疾病的突变谱进行比较.

11.自然选择分析

我们通过测序所观测到的体细胞突变可能是经历了复杂的过程所成的。因此,我们在研究这些突变的起源,突变如何受到DNA修复机制的影响,以及在疾病发展与进化过程中突变的规律方面需要做深入的分析。自然选择一般在两个方面发挥作用,即保留有利于疾病发展进化的突变的同时限制其在基因组中重要功能区域发生突变,例如转录调控区域和编码蛋白质的区域。因此,(1)如果实验设计是将primary disease与normal control做比较的话,系统的分析可以解析复杂疾病在形成突变过程中可能的机制和自然选择的因素。(2)如果实验设计是基于病灶及其转移位置或者邻接位置样本作测序,我们可以构建突变进化与转移的模型解析突变的动态模式和基因组中不稳定态变异的模式。

正向选择的判定: 分析SNP,SNV区域的正向选择趋势,在进化和群体遗传水平解释SNV,SNP的功能性;对待control与case 组样本,我们分别采用不同统计算法计算SNP,CNV在各自样本中的差异,进而从中发现具有正向选择特征的SV。

相关文献(References)

◆ Resequencing of 31 wild and cultivated soybean genomes identifies patterns of genetic diversity and selection
◆ Resequencing 302 wild and cultivated accessions identifies genes related to domestication and improvement in soybean

Google Web

Posted on 2015-07-28 | In Google | Comments: | Views: ℃
| Words count in article: | Reading time ≈


本文将不定期维护更新,删除不能用的,增加新的可用网址。欢迎 Ctrl+D 收藏。

原版:

[推荐]https://g.namaho.com/

[推荐]http://dir.scmor.com/google/

[推荐]https://gg.wen.lu/

[推荐]https://www.souguge.com/

[推荐]https://www.guge119.com/

http://g.bt.gg/

http://g.yon.hk/

https://4b4b.xyz/

http://hisbig.com/

http://s.jiasubao.co/

http://gg.cytbj.com/

https://allee.science/

https://g.gintoki.net/

https://www.ppx.pw/

http://www.guge.link/

http://www.fcczp.com/

http://www.hlfeel.com/

http://www.ggooo.net/

https://www.guge.click/

https://www.guge.date/

https://gg.searcher.top/

http://youshengbs.com/

http://google.kainidi.cn/

https://google.xface.me/

http://google.itqy8.com/

http://go.hibenben.com/

http://www.baidu.com.se/

https://g.nie.netease.com/

https://google-hk.wewell.net/

https://www.guge119.com/

https://g.yh.gs/

http://www.guge.link/

http://carbyne.net.cn/

http://gg.cellmean.com/

http://google.sidney-aldebaran.me/

https://g.yh.gs/

https://guge.in/

http://g.yon.hk/

https://gg.wen.lu/

https://gs.awei.me/

http://www.ppx.pw/

http://gg.cytbj.com/

https://g.eeload.com/

http://www.guge.link/

https://g.searcher.top/

https://www.ko50.com/

https://www.guge.click/

https://gg.searcher.top/

https://guge.droider.cn/

http://gg.cellmean.com/

https://google.xface.me/

http://www.google52.com/

https://www.guge119.com/

http://www.googlestable.cn/

http://google.sidney-aldebaran.me/

非原版:

搜:http://sou.cloudapp.net/

南搜:http://nan.so/sites

快搜:http://www.kuaiso.hk/

谷壳:http://www.googke.me/

蝴蝶:http://www.xiexingwen.com/

搜下看:http://soxiakan.com/

谷粉网:http://www.gool.wang/

喜乐搜:http://www.xilesou.com/

谷歌婊:http://www.gugebiao.com/

谷歌363:http://www.g363.com/

给搜搜索:http://www.geiso.cn/

印象搜索:http://gl.impress.pw/

谷粉搜搜:http://www.gfsousou.cn/

翻墙谷歌:http://search.52393.com/

极客搜索:http://www.geekgle.com/

谷粉搜搜:http://gfsoso.hao136.com/

红杏谷歌:http://www.hxgoogle.com/

中国谷歌:http://www.googleforchina.com/

极速网谷歌:http://google.mjisu.com/

布谷鸟搜索:http://m.wcuckoo.com/search/

Ask:http://home.tb.ask.com/

AOL:http://m.search.aol.com/

5Ask:http://cn.5ask.com/

Avira:https://safesearch.avira.com/

WOW:http://www.wow.com/

Suche:http://suche.web.de/

OpenGG:http://www.opengg.cn/

Randomk:http://gl.randomk.org/

Im Google:http://www.imgoogle.cn/

Disconnect:https://search.disconnect.me/

WebWebWeb:http://webwebweb.com/

智能跳转:

谷大爷:http://g.phvb.cn/

大中华:http://i.forbook.net/

简约谷歌:http://free123.cc/

谷粉恰搜:http://www.qiasou.com/

逆天谷歌:http://www.go2121.com/

谷歌学术:

https://www.roolin.com/

http://www.scholarnet.cn/

http://scholar.xilesou.com/

http://xueshu.cytbj.com/scholar/

http://gfss.cc.wallpai.com/scholar/

https://duliziyou.com/!scholar.google.com/schhp


贡献来源
http://www.itechzero.com/google-mirror-sites-collect.html

awk 不排序删除重复行

Posted on 2015-07-28 | In Linux | Comments: | Views: ℃
| Words count in article: | Reading time ≈

处理的文件

1
2
3
4
5
1 2 3
1 2 3
1 2 4
1 2 3
1 2 5

结果文件

1
2
3
1 2 3
1 2 4
1 2 5

处理流程

而如果使用sort加uniq进行排序的话,这个文档是看不出有什么不妥,不过我要处理的是用户名与密码一行行对应好的,如果使用sort + uniq处理的话,用户名都排到一块了,密码也又都跑到一块了。这样就分不出来那个是那个了。 而使用的脚本很简单:

1
awk '!x[$0]++' filename

注:此处的x只是一个数据参数的名字而已,随你用a、b、c、d都行。

简要解释一下,awk 的基本执行流程是,对文件的每一行,做一个指定的逻辑判断,如果逻辑判断成立,则执行指定的命令;如果逻辑判断不成立,则直接跳过这一行。

这里写的 awk 命令是!x[$0]++,意思是,首先创建一个 map 叫x,然后用当前行的全文$0作为 map 的 key,到 map 中查找相应的 value,如果没找到,则整个表达式的值为真,可以执行之后的语句;如果找到了,则表达式的值为假,跳过这一行。由于表达式之后有++,因此如果某个 key 找不到对应的 value,该++操作会先把对应的 value 设成 0,然后再自增成 1,这样下次再遇到重复的行的时候,对应的 key 就能找到一个非 0 的 value 了。

注:该处的map类似于array数组,只不过在awk中叫array不恰当。

awk Oneline中我们也学到过,awk 的流程是先判断表达式,表达式为真的时候就执行语句,可是我们前面写的这个 awk 命令里只有表达式,没有语句,那我们执行什么呢?原来,当语句被省略的时候,awk 就执行默认的语句,即打印整个完整的当前行。就这样,我们通过这个非常简短的 awk 命令实现了去除重复行并保留原有文件顺序的功能。

当然,我们也可以对该例进行下改变,通过判断某列的值相同,就只保留首行。

1
2
3
awk '!a[$3]++' filename

删除第三列重复的行

1
2
awk '!a[$NF]++' filename
删除最后一列重复的行

如何在去除重复行时对空白行不做处理,我这里总结了三种实现方法(都是仅使用awk工具),具体如下(为了便于区分,这里我使用nl命令加了行号):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
[root@361way ~]# cat a.txt |nl -b a   #原文件
1 1 2 3
2 1 2 3
3
4
5 1 2 4
6 1 2 3
7
8
9 1 2 5
[root@361way ~]# awk '!NF || !a[$0]++' a.txt |nl -b a #方法一
1 1 2 3
2
3
4 1 2 4
5
6
7 1 2 5
[root@361way ~]# awk '!NF {print;next} !($0 in a) {a[$0];print}' a.txt |nl -b a #方法二
1 1 2 3
2
3
4 1 2 4
5
6
7 1 2 5
[root@361way ~]# awk '!/./ || !a[$0]++' a.txt |nl -b a #方法三
1 1 2 3
2
3
4 1 2 4
5
6
7 1 2 5

指定列去重(经典之作)

1
awk '!a[$1]++'

解释

<1> :”!” 即非。

<2>:a[$0],以$0为数据下标,建立数组a

<3>:a[$0]++,即给数组a赋值,a[$0]+=1

Linux和windows定时备份数据到百度云盘

Posted on 2015-07-28 | In Linux | Comments: | Views: ℃
| Words count in article: | Reading time ≈

php实现Linux定时备份数据到百度云盘

安装bpcs_uploader 虽然关于bpcs_uploader的教程不少,但都千篇一律。虽然网上也有很详细的教程,不过可能还有漏掉的细节。
废话不多说了,开工。
下载程序包:

1
wget https://github.com/oott123/bpcs_uploader/zipball/master

解压:

1
unzip master

默认的文件夹名字很长,为了方便以后操作,重命名文件夹:

1
mv oott123-bpcs_uploader-3a33d09 baidu

这里我将文件夹名字修改成了baidu,需要注意的是,以后的默认文件夹名字可能有所不同,毕竟程序会升级,你需要看一下解压出来的文件夹名称是什么。
进入程序目录:

1
cd baidu

设置权限:

1
chmod +x bpcs_uploader.php

运行程序:

1
./bpcs_uploader.php

你可能会看到出错提示,因为运行程序需要PHP环境,而你的服务器上的PHP路径可能与程序中设置的不同,修改一下程序文件bpcs_uploader.php中的PHP路径即可。
查看PHP路径:

1
which php

编辑bpcs_uploader.php文件:

1
vi bpcs_uploader.php

将第一句#!后的路径修改为你的PHP路径,如果你安装的是WDCP一键包,路径为:/www/wdlinux/php/bin/php
登录百度开发者中心:http://developer.baidu.com/
创建一个Web应用,应用名称自定义,例如:huihuige,其他默认设置就可以了。
此时,我们可以得到该应用的API Key,运行./bpcs_uploader.php后首先要输入的就是Key。
另外我们还要在应用管理中找到API管理,开启PCS API,设置一个目录,该目录将用于存放服务器上传过来的数据。
温馨提示:开启PCS API时设置的目录不可更改,但可以在”操作”菜单中删除应用重建。
输入Key后,接下来需要输入app floder name,也就是刚才开启PCS API时设置的目录名称。
然后需要输入access token,将你的Key填入以下地址相应位置,在浏览器打开得到的地址:

1
https://openapi.baidu.com/oauth/2.0/authorize?response_type=token&client_id=KEY&redirect_uri=oob&scope=netdisk

然后你会看到一个写着”百度 Oauth2.0”的页面,将浏览器地址栏中的URL复制下来,找到access_token=和&之间的字符串,这就是access token,输入access token后就完成了,你会看到SSH终端显示出了你的百度云盘容量。
如果之前有安装过bpcs_uploader,那么可以执行以下命令初始化:

1
./bpcs_uploader.php init

bpcs_uploader用法 查询容量:

1
./bpcs_uploader.php quota

上传文件:

1
./bpcs_uploader.php upload [path_local] [path_remote]

[path_local]是指服务器上的文件路径,[path_remote]是指百度云盘中的路径。
下载文件:

1
./bpcs_uploader.php download [path_local] [path_remote]

删除文件:

1
./bpcs_uploader.php delete [path_remote]

离线下载:

1
./bpcs_uploader.php fetch [path_remote] [path_to_fetch]

自动备份脚本 接下来需要设置自动备份数据,网上有许多自动备份脚本,所以我就不再复述了。
这里要介绍的是,由于我们多半都在Linux服务器上安装了控制面板,而控制面板都有自动备份数据的功能,比如WDCP就可以设置自动备份数据到/www/backup目录,那么我们就不再需要自动备份数据的脚本了,只需要一个脚本将备份目录下的所有文件上传到百度云盘即可。
下载脚本至baidu目录下:

1
wget http://www.huihuige.com/wp-content/uploads/2013/10/baidubd.zip

解压:

1
unzip baidubd.zip

这个脚本实用于WDCP面板用户,如果你的备份目录不同,可以打开脚本修改。
测试脚本是否有效:

1
2
3
4
5
sh baidubd.sh
```
最后设置计划任务:
``` bash
crontab -e

加入一行:

1
0 0 * * * /root/baidu/baidubd.sh

这里设置了每天的凌晨零点自动备份数据到百度云盘。

python实现Linux命令行上传和下载百度云盘

bypy:一个python写得百度网盘的linux客户端工具.

下载

git clone https://github.com/houtianze/bypy.git

要求

  • python >=2.7
  • python需要Requests库

  • 1
    2
    3
    python
    >>> import requests
    ImportError: No module named requests

    使用

    完成以上安装,cd至之前的bypy的目录下,运行下面的命令开始初始化

    1
    2
    cd bypy
    ./bypy.py list

    首先他会要求你访问一个网址,需要你授权,授权后复制code给程序,如果没有报错,就可以看到你的同步目录了,你可以在网盘的我的应用数据文件夹里找到bypy文件夹,他就是应用目录了。

    如果你迫不及待的要测试,那就试试直接把当前目录上传至百度网盘

    1
    ./bypy.py upload

    如果你想看到上传进度,请加入-v选项

    1
    ./bypy.py -v upload

    常用命令

    ./bypy.py list 查看目录

    ./bypy.py mkdir newdir 新建目录

    ./bypy.py upload 上传

    ./bypy.py downfile或者./bypy.py downdir 下载
    ./bypy.py delete filename
    ./bypy.py rm dir
    用的时候注意用help查看一下参数的使用,其中remote path的/代表了apps/bypy/这个路径,且命令中的斜线/表示或,如“delete/remove/rm”表示delete,remove和rm三个命令。

    自动备份到百度云

  • 编写备份bash

  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #!/bin/sh
    # File: home/bin/bypy/baidu_sync.sh
    # Author: hope
    # Version: 1.0

    # Some vars
    UPLOAD_SCRIPTS_DIR="/public/home/zpxu/scripts"
    DATE=`date +%F`
    DATE_YEAR=`date +%Y`
    DATE_MONTH=`date +%m`

    # Backup
    cd $UPLOAD_SCRIPTS_DIR
    cd ..
    tar -czvf scripts_$DATE.tar.gz $UPLOAD_SCRIPTS_DIR
    /home/Python-2.7.10/./python /home/bin/bypy/./bypy.py mkdir scripts/$DATE_YEAR/$DATE_MONTH
    /home/Python-2.7.10/./python /home/bin/bypy/./bypy.py -v upload scripts_$DATE.tar.gz scripts/$DATE_YEAR/$DATE_MONTH
    rm scripts_$DATE.tar.gz
    /home/Python-2.7.10/./python /home/bin/bypy/./bypy.py list

  • 设置cron定时执行

  • 1
    $ crontab -e

    此时会启动默认编辑器vim,添加以下内容

    1
    2
    # backup my scripts to baidu
    40 1 * * * <备份bash目录/baidu_sync.sh>

    以上内容意义为:每一行由空格分割为6部分,依次为”分钟”、”小时”、”日”、”月”、”星期”、”要执行的程序”。
    备份操作可能消耗大量资源和时间,应该设置在凌晨访问量小、系统负载低的时候运行。如果有独立的服务器存储备份文件,还可以在脚本中增加ftp或者email传送备份文件到远程服务器的功能。


    百度限制上传/下载数度,所以对于较大文件的转移不是很方便,上传时至少可以打包压缩下,至于下载目前还不知道有何良策。


    由于百度权限问题,使用百度云备份需要差不多一个月跟新一次授权,否则报错
    OpenShift server failed, authorizing/refreshing with the Heroku server …
    跟新授权办法如下:
    1
    2
    运行bypy.py -c,删除令牌文件,然后重新授权一次。
    如果还不行,去百度应用授权(https://passport.baidu.com/accountbind) 里删除bypy再重新授权。


    Contribution from :
    http://www.lovelucy.info/auto-backup-website-shell-script.html
    https://github.com/houtianze/bypy/issues/199

    1…131415
    tiramisutes

    tiramisutes

    hope bioinformatics blog
    148 posts
    17 categories
    112 tags
    RSS
    GitHub E-Mail Weibo Twitter
    Creative Commons
    Links
    • qRT-PCR-Pipeline
    • GitBook《awk学习总结》
    • 棉花遗传改良团队
    • 生信菜鸟团-深圳大学城
    • 生信技能树
    • rabbit gao's blog
    • Huans(代谢+GWAS)
    • NSC-sequenceing
    • 伯乐在线
    • Linux开源中文社区
    • R-bloggers
    • R-resource
    • ggplot2
    • pele' blog
    © 2014 – 2023 tiramisutes
    Powered: Hexo
    |
    ▽ – NexT.Muse
    The total visits  times
    0%