2016-06-08 58 views
-1

我还有很长的文本文件(haplotypes.txt),看起来像这样:删除行,如果在第3列的值是另一个文本文件

19 rs541392352 55101281 A 0 0 ... 
19 rs546022921 55106773 C T 0 ... 
19 rs531959574 31298342 T 0 0 ... 

和一个简单的文本文件(positions.txt),看起来像这样:

55103603 
55106773 
55107854 
55112489 

如果想删除其中第三场存在于positions.txt的所有行,取得了如下把:

19 rs541392352 55101281 A 0 0 ... 
19 rs531959574 31298342 T 0 0 ... 

我希望有人能帮助。

+1

你有没有尝试过的东西?有很多类似的问题已经使用'awk'等做相同的问题。 – nu11p01n73R

回答

1

这应该工作:

$ grep -vwFf positions.txt haplotypes.txt 
19 rs541392352 55101281 A 0 0 ... 
19 rs531959574 31298342 T 0 0 ... 
  • -f positions.txt:从文件
  • -v阅读模式:反转匹配
  • -w:比赛唯一完整的单词(避免串匹配)
  • -F:固定字符串匹配(不要将模式解释为正则表达式)

这期望只有第三列看起来像一个很长的数字。如果模式恰好匹配未显示的某一列中完全相同的单词,则可能会出现误报。为避免这种情况,您必须使用按列筛选的awk解决方案(请参阅andlrc's answer)。

+0

这不会匹配文件中任何位置的'positions.txt'中的行。例如:55101281“而不仅仅是第三栏。 – andlrc

+0

@andlrc确切地说 - 如果OP的数据在行后面有很长的数字,这可能会有误报。 –

1

随着AWK:

awk 'NR == FNR{a[$0] = 1;next}!a[$3]' positions.txt haplotypes.txt 

击穿:

NR == FNR { # If file is 'positions.txt' 
    a[$0] = 1 # Store line as key in associtive array 'a' 
    next  # Skip next blocks 
} 
!a[$3]  # Print if third column is not in the array 'a' 
相关问题