ファイルから特定の数字で始まるすべての行を抽出するには?

ファイルから特定の数字で始まるすべての行を抽出するには?

次のファイルがあります。

head logistic_results.assoc_3.logistic
 CHR               SNP         BP   A1       TEST    NMISS         OR         STAT            P 
   2   2:129412140:T:C  129412140    C        ADD     1438      1.523         3.89    0.0001004
  15   15:26411414:G:A   26411414    A        ADD     1438     0.5577       -3.889    0.0001005
   7    7:24286442:T:G   24286442    G        ADD     1438     0.7449       -3.889    0.0001007
   7    7:24286638:G:C   24286638    C        ADD     1438     0.7449       -3.889    0.0001007
   2   2:129403636:T:C  129403636    C        ADD     1438      1.741        3.889    0.0001008
  15   15:70363332:A:G   70363332    G        ADD     1438      1.366        3.886     0.000102
   3    3:13698784:G:A   13698784    A        ADD     1438      1.465        3.884    0.0001028
   3    3:32665882:C:A   32665882    A        ADD     1438       1.54        3.883     0.000103
  12   12:32855080:A:G   32855080    G        ADD     1438      4.013        3.883    0.0001031

最初の列に3を含むすべての行を抽出する方法は?

これを試しましたが、空のファイルがあります...

grep '^3' logistic_results.assoc_3.logistic > logistic_results.assoc_3.logistic_chr3
awk '/^3/' logistic_results.assoc_3.logistic > logistic_results.assoc_3.logistic_chr3

この例では、結果は次のようになります。

  3    3:13698784:G:A   13698784    A        ADD     1438      1.465        3.884    0.0001028
  3    3:32665882:C:A   32665882    A        ADD     1438       1.54        3.883     0.000103

答え1

空でない最初のフィールドを文字列と比較します3

awk '$1 == "3"' logistic_results.assoc_3.logistic >logistic_results.assoc_3.logistic_chr3

コマンドの問題は、そのコマンドが行の3最初の文字になりたいのですが、サンプルデータでは、数字の前にスペースがある可能性があることです。デフォルトのフィールド区切り文字と組み合わせて使用​​すると、先行する空白文字に関係なくawk染色体名が配置されます。$1

$1 == "1"これも染色体1でのみ機能するため、より安全になります。一方、1フィールドの先頭で一致する正規表現(たとえば、/^[[:blank:]]*1/または)も、たとえば、$1 ~ /^1/と一致します。1112

答え2

または:

grep "^[[:blank:]]*3" logistic_results.assoc_3.logistic > logistic_results.assoc_3.logistic_chr3

関連情報