生物信息学习

文档处理之行列筛选

2018-12-23  本文已影响53人  liu_ll

新手小白(就是我),在处理文件的时候发了愁,师兄给了我一个文件,让我先筛选出来diff>0.2 和p <0.05的行列出来,然后根据这个进行秩和检验。
(本来想excel操作的,但是excel打不开。。。。。。。)
刚开始的文件非常的大,这个文件长这个样子,这个文件一共5列:


文件的格式
chr position    mean_normal    mean_tumor     diffbeta       p  

需要对第四列和第五列进行筛选。把abs(diffbata) >0.2 和 p <0.05的行挑选出来。
一:想到的是利用python的方法,进行判断和筛选
写上代码:

file1= open("./wilcox_result3.txt","r") #文件的读取
file2= open("./wilcox_result3.diff.txt","w") #目标文件的合成
head = file1.readline() #读取并跳过第一行
file2.write(head)
for line in file1:
    line = line.strip().split("\t")
    if abs(float(line[-2])) >0.2 and float(line[-1]) < 0.05:
        file2.write("\t".join(line)+"\n")

file1.close()
file2.close()

二: 其实还有一行可以代码解决的,利用perl单行

perl -F"\t" -lane 'print if $.==1 || ($F[3] > 0.2 && $F[4] < 0.05) ' < ./wilcox_result.txt > diff02.p005.hyper

代码注解:

   -F是指定分割的模式,我的文本是以tab分割。
  -lane 是指逐行读取
 “print if $.==1 ”把第一列输出,然后 || 是或的意思(为什么不是and的关系呢?如果是and的关系的话,第一行的样本信息无法输出)
  $F[3] >0.2 && $F[4] <0.05是指筛选的条件
  '< '指定输入文件
  '> '指定输出文件

----------------------------------------我是分割线---------------------------------------
让我想起来了awk 对文档的处理,
举个栗子:

awk cat file | awk '{print $1}'

取第一行,是不是觉得很熟悉?

上一篇 下一篇

猜你喜欢

热点阅读