![如何知道该列是否包含字符串?](https://linux22.com/image/168102/%E5%A6%82%E4%BD%95%E7%9F%A5%E9%81%93%E8%AF%A5%E5%88%97%E6%98%AF%E5%90%A6%E5%8C%85%E5%90%AB%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%9F.png)
我有一个如下所示的文件。
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