如何知道该列是否包含字符串?

如何知道该列是否包含字符串?

我有一个如下所示的文件。

SNP Beta A1 A2 P
rs124 -0.5 T C 0.11
rs534 0.22 A G 0.245
rs199 1.32 G C 0.345
rs947 -0.07 T G 0.00002
rs667 0.37 C T 0.04
....

有23640021行。我进行了分析,结果出现如下错误。

WARNING: 255837 SNPs had P outside of (0,1]. The P column may mislabeled.
head -10000 file 

第一个和最后 10000 行不包含 0-1 之外的任何数字。那么如何判断P列是否包含其他内容呢?

答案1

此 awk 命令将检查最后一列值是否 >1 或者包含任何其他字符(数字和点除外)

$ awk 'NR>1 && ($NF>1 || $NF~/[^0-9.]/)' test.txt
rs534 0.22 A G 0.245B
rs947 -0.07 T G 1.00002
rs667 0.37 C T 0.0A4

$ cat test.txt
SNP Beta A1 A2 P
rs124 -0.5 T C 0.11
rs534 0.22 A G 0.245B
rs199 1.32 G C 0.345
rs947 -0.07 T G 1.00002
rs667 0.37 C T 0.0A4
rs667 0.37 C T 0.04

答案2

警告消息似乎表明“关闭集”(在“左侧”打开,在“右侧”关闭)不包括 0。尝试 Kamaraj 的精美提案的以下修改:

awk 'NR>1 && ($NF>1 || $NF~/[^0-9.]/ || $NF == 0)' file

相关内容