文档处理之行列筛选
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}'
取第一行,是不是觉得很熟悉?