无法使用awk在名称中查找和计算包含hypen的文本

无法使用awk在名称中查找和计算包含hypen的文本,awk,Awk,使用下面的awk我似乎返回了不正确的计数。基本上,名称中带有-的ID(input)没有找到,尽管它们位于搜索的文件中。我不确定命令中有什么不对。谢谢:) 输入 SEPT12 SEPT5-GP1BB SEPT9 HLA-DRB1 HLA-DRB5 2 ids found SEPT5-GP1BB missing HLA-DRB1 missing HLA-DRB5 missing 5 ids found 文件 chr16 4837470 4837656 SEPT12 chr16 483753

使用下面的
awk
我似乎返回了不正确的计数。基本上,名称中带有
-
的ID(
input
)没有找到,尽管它们位于搜索的
文件中。我不确定命令中有什么不对。谢谢:)

输入

SEPT12
SEPT5-GP1BB
SEPT9
HLA-DRB1
HLA-DRB5
2 ids found
SEPT5-GP1BB missing
HLA-DRB1 missing
HLA-DRB5 missing
 5 ids found 
文件

chr16 4837470 4837656 SEPT12
chr16 4837536 4837656 SEPT12
chr22 19711038 19711157 SEPT5-GP1BB
chr22 19711038 19711157 SEPT5-GP1BB
chr22 19711366 19711997 SEPT5-GP1BB
chr22 19711367 19711997 SEPT5-GP1BB
chr22 19711367 19711997 SEPT5-GP1BB
chr17 75398130 75398795 SEPT9
chr17 75471590 75471995 SEPT9
chr17 75478215 75478427 SEPT9
chr6 32487136 32487438 HLA-DRB1
chr6 32489671 32489961 HLA-DRB1
chr6 32551875 32552165 HLA-DRB5
电流输出

SEPT12
SEPT5-GP1BB
SEPT9
HLA-DRB1
HLA-DRB5
2 ids found
SEPT5-GP1BB missing
HLA-DRB1 missing
HLA-DRB5 missing
 5 ids found 
所需输出

SEPT12
SEPT5-GP1BB
SEPT9
HLA-DRB1
HLA-DRB5
2 ids found
SEPT5-GP1BB missing
HLA-DRB1 missing
HLA-DRB5 missing
 5 ids found 
awk(缺少.awk)


试着这样做:

awk '
    NR==FNR { lookup[$0]++; next }
    ($4 in lookup) { seen[$4]++ } 
    END {
      print length(seen)" ids found"; 
      for (id in seen) delete lookup[id]; 
      for (id in lookup) print id " is missing"
}' input file

您的输出具体代表什么?您是否在计算文件中找到的输入元素的数量,而不管它们被找到了多少次


如果是这样,我认为您的代码是好的,只要您不(错误地)设置
FS
。当我把那行注释掉时,它似乎对我有用。

问题是您在字段分隔符
FS
中包含了
-
。因此,虽然看到的
包含第一个文件中的
SEPT5-GP1BB
(因为您使用了
$0
,其中包括分隔符),但第二个文件中的
$4
只是
SEPT5
。如果您设置了
FS=“[[:space:][]+
,您应该会很好,但这是默认设置,所以您根本不需要设置
FS
。感谢大家的帮助和解释:)。