从文件中删除满足条件行

时间:2016-06-18 07:38:25

标签: python perl shell

我有一个文件

chrM 1114 A A 555 G 52 9.8 xyz
chrM 1256 A A 555 G 0  inf xac
chrM 1184 A A 400 G 50 8 cxv
chrM 1148 p q 500 G 100 5 asad
chrM 2500 x x 555 v 0  inf dad

这里的第二列是$ 5 / $ 6的比率 我想删除那些行在哪里  $ 3 = $ 4和$ 8 = inf如果整个条件满足则应删除该行 预期产出

chrM 1114 A A 555 G 52 9.8 xyz
chrM 1184 A A 400 G 50 8 cxv
chrM 1148 p q 500 G 100 5 asad

我试着做

while $3=$4
do if %8=inf
do -d 
done
done 

4 个答案:

答案 0 :(得分:1)

使用awk就像:

awk '{if ($3 != $4 && $8 != "Inf") { print $0 } }' myfile.txt

答案 1 :(得分:1)

在Perl中,解决方案几乎是你问题的转录

chrM 1114 A A 555 G 52 9.8 xyz
chrM 1184 A A 400 G 50 8 cxv
chrM 1148 p q 500 G 100 5 asad

输出

perldoc

你甚至没有尝试过这个吗? Perl documentation非常好,也可以作为Perl发行版的一部分安装,并可通过计算机上的{{1}}命令使用

答案 2 :(得分:0)

对此的python解决方案是:

file = open("myfile.txt")
file2 = open("myfile2.txt", "a")
for i, line in enumerate(file)
    strList = line.split()
    if not (strList[2] == strList[3] and strList[7] == "inf"):
        file2.write(line)
file.close()
file2.close()

这假设值以空格分隔

答案 3 :(得分:-1)

awk '!$3==$4||$8!~/inf/' file
chrM 1114 A A 555 G 52 9.8 xyz
chrM 1184 A A 400 G 50 8 cxv
chrM 1148 p q 500 G 100 5 asad

现在错误地纠正了。