awk循环打印错误次数
awk loop printing wrong number of times
我有一个这样的文件(space 选项卡):
Agent 299301 1
Person 259672 2
Place 208239 3
Location 208239 4
PopulatedPlace 156701 5
Region 153246 6
AdministrativeRegion 153246 7
Work 96536 8
Agent 299301 1
Person 259672 2
我想 return 每行的不同数字在第二列中出现的次数与它出现的次数一样多
例如:
先是return数1
299301次,然后return2
259672次,然后return3
208239次
为此,我正在使用这个 awk 命令:
cat file | awk -F ' ' '{for (i=1; i<=; i++) print NR}' > output
它似乎适用于第二列中的小数字,但在此文件示例中,我不知道为什么 returning 每个数字(在本例中为 1
)不正确的数字次数:
它是 returning 数 1
558973 次而不是 299301 次
但它 return 是文件其余行中的正确数字(数字 2, 3, 4...
)
如果我在文件中添加更多行,它也会 return 错误次数 2, 3, 4
直到 9
,但它也适用于数字 10, 11, 12, 13...
所以我不知道为什么会这样,希望你能帮助我。
提前致谢。
当输入问题中显示的内容时,问题中显示的程序为我输出“1”正好 299301 次,如您所料。我倾向于认为 @choroba 对这个问题的评论表明了 不同 程序的性质,您用它观察到 558973 行“1”。也就是说,这个,或者实质上等同的东西:
cat file | awk -F ' ' '{for (i=1; i<=; i++) print }' > output
不同之处在于,一个打印 NR
,输入行号,而另一个打印
,从输入行读取的第三个字段。
错的不是您的脚本,而是您尝试验证其输出的方式。您正在将输出传输到 grep '1' | wc -l
或类似的,因此正在计算 1
的数量(299301
)+ 10
的数量(259672
) 这样就得到了总数 558973
.
$ awk '{for (i=1; i<=; i++) print NR}' file | grep '1' | wc -l
558973
$ awk '{for (i=1; i<=; i++) print NR}' file | grep '^1$' | wc -l
299301
顺便说一句,cat file
和 -F ' '
并没有造成任何真正的伤害,但在这种情况下它们也没有任何用处,只需像我上面那样使用 awk '{for (i=1; i<=; i++) print NR}' file
。
我有一个这样的文件(space 选项卡):
Agent 299301 1
Person 259672 2
Place 208239 3
Location 208239 4
PopulatedPlace 156701 5
Region 153246 6
AdministrativeRegion 153246 7
Work 96536 8
Agent 299301 1
Person 259672 2
我想 return 每行的不同数字在第二列中出现的次数与它出现的次数一样多
例如:
先是return数1
299301次,然后return2
259672次,然后return3
208239次
为此,我正在使用这个 awk 命令:
cat file | awk -F ' ' '{for (i=1; i<=; i++) print NR}' > output
它似乎适用于第二列中的小数字,但在此文件示例中,我不知道为什么 returning 每个数字(在本例中为 1
)不正确的数字次数:
它是 returning 数 1
558973 次而不是 299301 次
但它 return 是文件其余行中的正确数字(数字 2, 3, 4...
)
如果我在文件中添加更多行,它也会 return 错误次数 2, 3, 4
直到 9
,但它也适用于数字 10, 11, 12, 13...
所以我不知道为什么会这样,希望你能帮助我。
提前致谢。
当输入问题中显示的内容时,问题中显示的程序为我输出“1”正好 299301 次,如您所料。我倾向于认为 @choroba 对这个问题的评论表明了 不同 程序的性质,您用它观察到 558973 行“1”。也就是说,这个,或者实质上等同的东西:
cat file | awk -F ' ' '{for (i=1; i<=; i++) print }' > output
不同之处在于,一个打印 NR
,输入行号,而另一个打印 ,从输入行读取的第三个字段。
错的不是您的脚本,而是您尝试验证其输出的方式。您正在将输出传输到 grep '1' | wc -l
或类似的,因此正在计算 1
的数量(299301
)+ 10
的数量(259672
) 这样就得到了总数 558973
.
$ awk '{for (i=1; i<=; i++) print NR}' file | grep '1' | wc -l
558973
$ awk '{for (i=1; i<=; i++) print NR}' file | grep '^1$' | wc -l
299301
顺便说一句,cat file
和 -F ' '
并没有造成任何真正的伤害,但在这种情况下它们也没有任何用处,只需像我上面那样使用 awk '{for (i=1; i<=; i++) print NR}' file
。