如何在文件中找到最常见的名称?
How to find the most common name in file?
我的文件内容(5 列):
text1:##text1:27438:1001:Name Surname Role:
text1:##text1:27438:1001:Name2 Surname Role:
text1:##text1:27438:1001:Name3 Surname Role:
text1:##text1:27438:1001:Name4 Surname Role:
......
+10000 lines
我想找到最常见的名字。
我试过的是:
cat /opt/users | awk '{print }' | sort | uniq -c | sort -n | tail -1
但我得到的是一个数值。
我是不是弄错了?
awk '{print }'
接下来我可以尝试什么命令?
过滤空行并逆序排序(sort -nr):
grep -v -e "^$" /opt/users | cut -f5 -d: | \
cut -f1 -d" " | sort | uniq -c | sort -nr | tail -1
如前所述,awk
使用 space/tab 个字符作为默认字段分隔符(-F 选项)。
您似乎需要添加 :
作为字段分隔符。 Space 是默认分隔符,如果您使用它,字段将按如下方式分配:
= text1:##text1:27438:1001:Name
= Surname
= Role:
另外,让awk
直接打开并读取文件。
这里,:
和space都作为字段分隔符:
awk -F'[: ]' '{print }' /opt/users | sort | uniq -c | sort -rn | head -1
然后分配字段变为:
= text1
= ##text1
= 27438
= 1001
= Name
= Surname
= Role
= (empty)
注意:您还有内置变量 NF
,它将告诉您每行分配的 F
字段的 N
数量。 8
在上面的例子中。
使用 GNU awk,您不需要其他工具。等待对我上面的评论的回答:
gawk -F: '
{count[]++}
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (name in count) {
print count[name], name
exit
}
}
' file
在名称字段中找到最常见的单词
# replace `{count[]++}` with
{
n = split(, names, /[[:blank:]]+/)
for (i=1; i<=n; i++) count[names[i]]++
}
我的文件内容(5 列):
text1:##text1:27438:1001:Name Surname Role:
text1:##text1:27438:1001:Name2 Surname Role:
text1:##text1:27438:1001:Name3 Surname Role:
text1:##text1:27438:1001:Name4 Surname Role:
......
+10000 lines
我想找到最常见的名字。
我试过的是:
cat /opt/users | awk '{print }' | sort | uniq -c | sort -n | tail -1
但我得到的是一个数值。
我是不是弄错了?
awk '{print }'
接下来我可以尝试什么命令?
过滤空行并逆序排序(sort -nr):
grep -v -e "^$" /opt/users | cut -f5 -d: | \
cut -f1 -d" " | sort | uniq -c | sort -nr | tail -1
如前所述,awk
使用 space/tab 个字符作为默认字段分隔符(-F 选项)。
您似乎需要添加 :
作为字段分隔符。 Space 是默认分隔符,如果您使用它,字段将按如下方式分配:
= text1:##text1:27438:1001:Name
= Surname
= Role:
另外,让awk
直接打开并读取文件。
这里,:
和space都作为字段分隔符:
awk -F'[: ]' '{print }' /opt/users | sort | uniq -c | sort -rn | head -1
然后分配字段变为:
= text1
= ##text1
= 27438
= 1001
= Name
= Surname
= Role
= (empty)
注意:您还有内置变量 NF
,它将告诉您每行分配的 F
字段的 N
数量。 8
在上面的例子中。
使用 GNU awk,您不需要其他工具。等待对我上面的评论的回答:
gawk -F: '
{count[]++}
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (name in count) {
print count[name], name
exit
}
}
' file
在名称字段中找到最常见的单词
# replace `{count[]++}` with
{
n = split(, names, /[[:blank:]]+/)
for (i=1; i<=n; i++) count[names[i]]++
}