Regex 使用grep的mulit钳子的问题

Regex 使用grep的mulit钳子的问题,regex,linux,unix,grep,Regex,Linux,Unix,Grep,我有以下文件 1:10177 rs367896724 A AC 1:10352 rs555500075 T TA 1:10616 rs376342519 CCGCCGTTGCAAAGGCGCGCCG C 1:11012 rs544419019 C G 1:11063 rs561109771 T G 1:13110 rs540538026 G A 1:13116 rs62635286 T G 1:13118 rs62028691 A G 1:13273 rs531730856 G C 1:1328

我有以下文件

1:10177 rs367896724 A AC
1:10352 rs555500075 T TA
1:10616 rs376342519 CCGCCGTTGCAAAGGCGCGCCG C
1:11012 rs544419019 C G
1:11063 rs561109771 T G
1:13110 rs540538026 G A
1:13116 rs62635286 T G
1:13118 rs62028691 A G
1:13273 rs531730856 G C
1:13284 rs548333521 GT A
1:11012 rs544419019 C G
1:11063 rs561109771 T G
1:13110 rs540538026 G A
1:13116 rs62635286 T G
1:13118 rs62028691 A G
1:13273 rs531730856 G C
其中最后两列只能有值[ATCG]。我想把最后两列中只有一个字母的所有行都涂成灰色

预期产出: 我有以下文件

1:10177 rs367896724 A AC
1:10352 rs555500075 T TA
1:10616 rs376342519 CCGCCGTTGCAAAGGCGCGCCG C
1:11012 rs544419019 C G
1:11063 rs561109771 T G
1:13110 rs540538026 G A
1:13116 rs62635286 T G
1:13118 rs62028691 A G
1:13273 rs531730856 G C
1:13284 rs548333521 GT A
1:11012 rs544419019 C G
1:11063 rs561109771 T G
1:13110 rs540538026 G A
1:13116 rs62635286 T G
1:13118 rs62028691 A G
1:13273 rs531730856 G C
我试过以下方法,但没有结果

grep-F'[ACTG]?\s[ACTG]?$'文件头

grep'[ACTG]?\s[ACTG]?$'文件头

grep-E.?\s.?$文件

使用最后一个命令,我得到以下信息:

1:10616 rs376342519 CCGCCGTTGCAAAGGCGCGCCG C
1:11012 rs544419019 C G
1:11063 rs561109771 T G
1:13110 rs540538026 G A
1:13116 rs62635286 T G
1:13118 rs62028691 A G
1:13273 rs531730856 G C
1:13284 rs548333521 G A
谢谢你的帮助

像这样的

awk '!(length($NF)>1 || length($(NF-1))>1)' file
1:11012 rs544419019 C G
1:11063 rs561109771 T G
1:13110 rs540538026 G A
1:13116 rs62635286 T G
1:13118 rs62028691 A G
1:13273 rs531730856 G C
仅打印最后和第二个最后字段长度不大于1的字段

较短的版本:

awk 'length($NF$(NF-1))==2' file
awk 'length($3$4)==2' file
仅测试
ACTG

awk '$NF$(NF-1)~/^[ACTG]{2}$/' file
awk '$3$4~/^[ACTG]{2}$/' file
像这样的

awk '!(length($NF)>1 || length($(NF-1))>1)' file
1:11012 rs544419019 C G
1:11063 rs561109771 T G
1:13110 rs540538026 G A
1:13116 rs62635286 T G
1:13118 rs62028691 A G
1:13273 rs531730856 G C
仅打印最后和第二个最后字段长度不大于1的字段

较短的版本:

awk 'length($NF$(NF-1))==2' file
awk 'length($3$4)==2' file
仅测试
ACTG

awk '$NF$(NF-1)~/^[ACTG]{2}$/' file
awk '$3$4~/^[ACTG]{2}$/' file

如果在最后两列中只需要一个字符,请使用前导空白字符。根据您的描述,听起来也不应该有任何可选字符

grep-E'\s.$文件

grep-E'(\s[ACTG]){2}$'文件


两者都可以。

如果您想在最后两列中只包含一个字符,请使用前导空白字符。根据您的描述,听起来也不应该有任何可选字符

grep-E'\s.$文件

grep-E'(\s[ACTG]){2}$'文件


这两种方法都应该有效。

也许
awk'$3~/^[ACTG]$/&&$4~/^[ACTG]$/'file>newfile
可以吗?也许
awk'$3~/^[ACTG]$/&&$4~/^[ACTG]$/'file>newfile
可以吗?为什么在他的正则表达式只缺少前导空间时建议awk呢?如果有更复杂的事情要做,awk可能是一个好的解决方案。在这篇文章中,我不是唯一一个建议
awk
的人。为什么要在他的正则表达式只缺少前导空间的时候建议awk呢?
awk
如果有更复杂的事情要做,可能是一个很好的解决方案。在这篇文章中,我并不是唯一一个建议awk的人。