如何从文件中提取不包含 4 个字符串的行?

如何从文件中提取不包含 4 个字符串的行?

我有一个这样的文件:

#CHROM  POS ID  REF ALT A1  A1_FREQ FIRTH?  TEST    OBS_CT  BETA    SE  Z_OR_F_STAT P   ERRCODE
1   740284  rs61770167  C   T   T   0.0031746   N   ADD 21420   NA  NA  NA  NA  .
1   740284  rs61770167  C   T   T   0.0031746   N   DOMDEV  21420   NA  NA  NA  NA  RANK_DEFICIEN
1   740284  rs61770167  C   T   T   0.0031746   N   GENO_2DF    21420   NA  NA  NA  NA  CORR_TOO_HIGH
1   754433  rs150578204 G   A   A   0.00400223  N   ADD 21488   NA  NA  NA  NA  CORR_TOO_HIGH
1   754433  rs150578204 G   A   A   0.00400223  N   DOMDEV  21488   NA  NA  NA  NA  VIF_TOO_HIGH
1   754433  rs150578204 G   A   A   0.00400223  N   GENO_2DF    21488   NA  NA  NA  NA  .
1   754458  rs142682604 G   T   T   0.00397897  N   ADD 21488   NA  NA  NA  NA  CORR_TOO_HIGH
1   754458  rs142682604 G   T   T   0.00397897  N   DOMDEV  21488   NA  NA  NA  NA  CORR_TOO_HIGH
1   754458  rs142682604 G   T   T   0.00397897  N   GENO_2DF    21488   NA  NA  NA  NA  UNFINISHED

如何仅提取没有这 4 个字符串中任何一个的行:CORR_TOO_HIGH、VIF_TOO_HIGH、RANK_DEFICIENT、UNFINISHED。或者换句话说,第 15 列只能有“.”。而不是其他字符串。

文件以空格分隔。

我知道如何对一个字符串执行此操作,但我不知道如何对多个字符串执行此操作:

grep -v 'CORR_TOO_HIGH' nephropathy_chr1.pheno.glm.logistic.hybrid > file.out

此示例的预期输出是:

#CHROM  POS ID  REF ALT A1  A1_FREQ FIRTH?  TEST    OBS_CT  BETA    SE  Z_OR_F_STAT P   ERRCODE
1   740284  rs61770167  C   T   T   0.0031746   N   ADD 21420   NA  NA  NA  NA  .
1   754433  rs150578204 G   A   A   0.00400223  N   GENO_2DF    21488   NA  NA  NA  NA  .

答案1

awk '$15=="."||NR<2' file
  • NR<2打印标题
  • $15=="."在第 15 列每隔一行打印.

答案2

像这样 :

awk '$15 !~ /^(CORR_TOO_HIGH|VIF_TOO_HIGH|RANK_DEFICIENT|UNFINISHED)$/' file

相关内容