首页 > 解决方案 > awk 字段分隔符区分 -1、10 和 1

问题描述

假设我有一个文本文件:

>>cat tmp.txt
1 1 1 1 1 -1 -1 -1 -1 -1 10 10 10 10 10

我想找到数字 1、-1 和 10 的唯一出现次数。以下是我目前所拥有的:

awk -F '-1' '{print NF-1,NR}' tmp.txt | awk '{print $1}'
awk -F '10' '{print NF-1,NR}' tmp.txt | awk '{print $1}'
awk -F '1' '{print NF-1,NR}' tmp.txt | awk '{print $1}'

其中输出是 5、5 和 15,而不是 5、5 和 5。 awk 命令似乎正在为最终命令查找1 的每个实例。如何正确处理?

标签: awkmatch

解决方案


使用默认分隔符:

awk '{for(i=1;i<=NF;i++)cnt[$i]++};END{for(i in cnt)print i,cnt[i]}'

推荐阅读