AWK - END 语句中的 3 for 循环不是期望的结果
AWK - 3 for loops in END statement not desired result
AWK 新手。我有一个包含以下内容的文件:
FirstName,LastName,Email,ID,Number,IDToBeMatched
John,Smith,js@.com,js30,4,kt78
George,Haynes,gh@.com,gh67,3,re201
Mary,Dewar,md@.com,md009,4,js30
Kevin,Pan,kp@.com,kp41,2,md009
,,,,,ti10
,,,,,qwe909
,,,,,md009
,,,,,kor28
,,,,,gh67
想法是检查 header ID 下面的任何字段是否与 IDToBeMatched 下面的任何字段匹配,以及是否匹配以打印整个记录但最后一个字段(即 IDToBeMatched) .所以我的最终输出应该是这样的:
FirstName,LastName,Email,ID,Number
John,Smith,js@.com,js30,4
George,Haynes,gh@.com,gh67,3
Mary,Dewar,md@.com,md009,4
到目前为止我的代码
awk 'BEGIN{
FS=OFS=",";SUBSEP=",";
}
{
# all[,,,,]
a[]++;
b[]++;
}
END{ #for(k in all){
for(i in a){
for(j in b){
if(i==j){
print i #k
}
}
}
#}
}' inputfile
这只打印匹配项。但是,如果我尝试通过取消注释上述脚本中的行来引入另一个循环,以便为匹配字段设置整行,事情就会变得一团糟。我明白为什么,但我找不到解决方案。我想引入一个 next
语句,但在 END
中不允许这样做。我的 AWK 默认为 GAWK,我更喜欢 (G)AWK 解决方案。
提前致谢。
最后一个字段有更多记录,因为它是来自 ID "pool" 的 copied/pasted,而 ID "pool" 不一定具有与其粘贴的文件相同的记录数。
$ awk -F, 'NR==FNR{a[];next} (FNR==1)||( in a){sub(/,[^,]+$/,"");print}' file file
FirstName,LastName,Email,ID,Number
John,Smith,js@.com,js30,4
George,Haynes,gh@.com,gh67,3
Mary,Dewar,md@.com,md009,4
AWK 新手。我有一个包含以下内容的文件:
FirstName,LastName,Email,ID,Number,IDToBeMatched
John,Smith,js@.com,js30,4,kt78
George,Haynes,gh@.com,gh67,3,re201
Mary,Dewar,md@.com,md009,4,js30
Kevin,Pan,kp@.com,kp41,2,md009
,,,,,ti10
,,,,,qwe909
,,,,,md009
,,,,,kor28
,,,,,gh67
想法是检查 header ID 下面的任何字段是否与 IDToBeMatched 下面的任何字段匹配,以及是否匹配以打印整个记录但最后一个字段(即 IDToBeMatched) .所以我的最终输出应该是这样的:
FirstName,LastName,Email,ID,Number
John,Smith,js@.com,js30,4
George,Haynes,gh@.com,gh67,3
Mary,Dewar,md@.com,md009,4
到目前为止我的代码
awk 'BEGIN{
FS=OFS=",";SUBSEP=",";
}
{
# all[,,,,]
a[]++;
b[]++;
}
END{ #for(k in all){
for(i in a){
for(j in b){
if(i==j){
print i #k
}
}
}
#}
}' inputfile
这只打印匹配项。但是,如果我尝试通过取消注释上述脚本中的行来引入另一个循环,以便为匹配字段设置整行,事情就会变得一团糟。我明白为什么,但我找不到解决方案。我想引入一个 next
语句,但在 END
中不允许这样做。我的 AWK 默认为 GAWK,我更喜欢 (G)AWK 解决方案。
提前致谢。
最后一个字段有更多记录,因为它是来自 ID "pool" 的 copied/pasted,而 ID "pool" 不一定具有与其粘贴的文件相同的记录数。
$ awk -F, 'NR==FNR{a[];next} (FNR==1)||( in a){sub(/,[^,]+$/,"");print}' file file
FirstName,LastName,Email,ID,Number
John,Smith,js@.com,js30,4
George,Haynes,gh@.com,gh67,3
Mary,Dewar,md@.com,md009,4