Linux

如何知道該列是否包含字元串?

  • February 24, 2020

我有一個類似於下面的文件。

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 行和最後 10000 行不包含 0-1 之外的任何數字。那麼我怎樣才能確定 P 的列是否包含其他內容?

此 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

警告消息似乎表明“clopen set”(在“左側”打開,在“右側”關閉)不包括 0。試試 Kamaraj 的好建議的這個 apadtion:

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

引用自:https://unix.stackexchange.com/questions/569317