【发布时间】:2021-06-10 21:43:39
【问题描述】:
我的文本文件中的数据看起来像这样
| chrom | start | end | gene | mutation |
|---|---|---|---|---|
| chr1 | 12756 | 12790 | DVL1 | T/C |
| chr1 | 12856 | 12890 | DVL2 | ./. |
| chr1 | 12956 | 12990 | DVL3 | T/C |
我需要删除所有包含 ./ 的行。其中,文件大约有 500 行,所以我不需要任何超级高效的东西。
我尝试了很多不同的方法,但都没有成功,都是为了去掉“./”。并删除不包含“./.”的行在最后一列。
grep -v "./." input.txt > output.txt
awk '/"./."/' input.txt > tmpfile && mv tmpfile output.txt
fgrep -xv "./." input.txt > output.txt
awk -F',' '$5 !~ "./." {print $0}' input.txt > output.txt
awk 'BEGIN { OFS=FS="\t" } $5 !~ /^('./.')/' input.txt > output.txt
awk '!"./." ' input.txt > output.txt
sed -i '"./."d' input.txt > output.txt
我觉得我很接近,但看不到我缺少什么,感谢任何帮助。
【问题讨论】:
-
grep -v '\./\.',避开点。或使用grep -vF './.'。见ideone.com/IcjM5Z -
@RavinderSingh13 关于转义特殊字符的唯一问题,一个点。或使用
-F选项。该帖子中涵盖了所有内容。一般来说,What special characters must be escaped in regular expressions? 的骗子,但我试图在这里找到一个面向grep的帖子 -
@WiktorStribiżew,我同意有些事情被涵盖了,但是当我们有一个完整的答案时,为什么要进行部分欺骗。如果我们放一个精确的骗子来制造这个骗子,我很好。
-
根据您对输入文本外观的艺术渲染,我们无法判断哪些是正确的。如果输入以逗号分隔,
awk -F ','将起作用;awk -F '\t'是正确的,如果它是制表符分隔的。如果您使用了正确的正则表达式,其中任何一个都应该有效,但如果没有更多细节,我们无法判断。 -
edit 您的问题会显示简洁、可测试的纯文本示例输入和预期输出,以便我们为您提供帮助。没有图片,没有链接,没有艺术表格,只有原始文本,我们可以按原样复制/粘贴以测试潜在的解决方案。