如何从文件中提取以特定数字开头的所有行?

如何从文件中提取以特定数字开头的所有行?

我有一个这样的文件:

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在字段开头匹配的正则表达式(例如 with /^[[:blank:]]*1/or $1 ~ /^1/)也将匹配eg 11and 12

答案2

或者:

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

相关内容