无法使用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
。感谢大家的帮助和解释:)。