列に文字列が含まれているかどうかはどうすればわかりますか?

列に文字列が含まれているかどうかはどうすればわかりますか?

以下のファイルがあります。

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

警告メッセージは、「閉じるセット」(「左」で開き、「右」で閉じる)にゼロが含まれていないことを示すようです。 Kamarajのエレガントな提案を次のように修正してください。

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

関連情報