Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在文件中找到最常用的名称?_Bash_Awk_Zsh - Fatal编程技术网

Bash 如何在文件中找到最常用的名称?

Bash 如何在文件中找到最常用的名称?,bash,awk,zsh,Bash,Awk,Zsh,我有一个包含内容的文件(5列): 我想找到最常见的名字 我尝试的是: cat /opt/users | awk '{print $5}' | sort | uniq -c | sort -n | tail -1 但是我得到了一个数值 我犯了一个错误吗 awk '{print $5}' 下一步可以尝试什么命令?过滤掉空行,并按相反顺序排序(sort-nr): 如前所述,awk使用空格/制表符作为默认字段分隔符(-F选项)。过滤掉空行,并按相反顺序排序(sort-nr): 如前所述,awk使用空

我有一个包含内容的文件(5列):

我想找到最常见的名字

我尝试的是:

cat /opt/users | awk '{print $5}' | sort | uniq -c | sort -n | tail -1
但是我得到了一个数值

我犯了一个错误吗

awk '{print $5}'

下一步可以尝试什么命令?

过滤掉空行,并按相反顺序排序(sort-nr):


如前所述,
awk
使用空格/制表符作为默认字段分隔符(-F选项)。

过滤掉空行,并按相反顺序排序(sort-nr):


如前所述,
awk
使用空格/制表符作为默认字段分隔符(-F选项)。

似乎需要添加
作为字段分隔符。空格是默认分隔符,如果使用空格,字段将按如下方式分配:

$1 = text1:##text1:27438:1001:Name
$2 = Surname 
$3 = Role:
另外,让
awk
打开并直接读取文件

在这里,
和空格都用作字段分隔符:

awk -F'[: ]' '{print $5}' /opt/users | sort | uniq -c | sort -rn | head -1
分配字段将变为:

$1 = text1
$2 = ##text1
$3 = 27438
$4 = 1001
$5 = Name
$6 = Surname 
$7 = Role
$8 =        (empty)

注意:您还有内置变量
NF
,它将告诉您每行分配的
N
Field的数量<代码>8在上面的例子中。

似乎需要添加
作为字段分隔符。空格是默认分隔符,如果使用空格,字段将按如下方式分配:

$1 = text1:##text1:27438:1001:Name
$2 = Surname 
$3 = Role:
另外,让
awk
打开并直接读取文件

在这里,
和空格都用作字段分隔符:

awk -F'[: ]' '{print $5}' /opt/users | sort | uniq -c | sort -rn | head -1
分配字段将变为:

$1 = text1
$2 = ##text1
$3 = 27438
$4 = 1001
$5 = Name
$6 = Surname 
$7 = Role
$8 =        (empty)

注意:您还有内置变量
NF
,它将告诉您每行分配的
N
Field的数量<代码>8在上述情况下。

使用GNU awk,您不需要其他工具。在回答我的上述评论之前:

gawk-F:'
{计数[$5]+}
结束{
PROCINFO[“排序在”]=“val\u num\u desc”
用于(计数中的名称){
打印计数[名称],名称
出口
}
}
"档案"
在名称字段中查找最常用的单词

    # replace `{count[$5]++}` with
    {
        n = split($5, names, /[[:blank:]]+/)
        for (i=1; i<=n; i++) count[names[i]]++
    }
#将`{count[$5]+}`替换为
{
n=拆分($5,名称,/[:blank:][]+/)

对于使用GNU awk的(i=1;i),您不需要其他工具。在回答我的上述评论之前:

gawk-F:'
{计数[$5]+}
结束{
PROCINFO[“排序在”]=“val\u num\u desc”
用于(计数中的名称){
打印计数[名称],名称
出口
}
}
"档案"
在名称字段中查找最常用的单词

    # replace `{count[$5]++}` with
    {
        n = split($5, names, /[[:blank:]]+/)
        for (i=1; i<=n; i++) count[names[i]]++
    }
#将`{count[$5]+}`替换为
{
n=拆分($5,名称,/[:blank:][]+/)

对于(i=1;i
awk-F:{print$5}/opt/users |……
而不设置@vgersh99显示的字段分隔符,您的
$1
text1:#text1:27438:1001:Name
$2
姓氏
…awk使用空格作为默认分隔符。$5列(按空格)是空的-因此结果只是一个数字,或者更具体地说:空字符串,行数。这让我想起:@glennjackman lol-我以前没读过!太好了!“人们的名字都是用Unicode码点映射的。”-我想知道以前被称为普林斯的艺术家在回到普林斯之前是否获得了代码点?最后一个是赢家:“40.人们有名字”:-
awk-F:{print$5}“/opt/users |…”
没有设置@vgersh99显示的字段分隔符,您的
$1
text1:##text1:27438:1001:Name
$2
姓氏
…awk使用空格作为默认分隔符。$5列(按空格)是空的-因此结果只是一个数字,或者更具体地说:空字符串,行数。这让我想起:@glennjackman lol-我以前没读过!太好了!“人们的名字都是用Unicode码点映射的。”-我想知道这位以前被称为普林斯的艺术家在回到普林斯之前是否获得了密码点?最后一位是获胜者:“40.人们都有名字”:-)天哪,谢谢你,这就是我要找的。@deuq太棒了!不客气!天哪,谢谢你,这就是我要找的。@deuq太棒了!不客气!谢谢你的帮助!但是我不得不选择前面的答案作为解决方案,并在我的任务中使用它,因为它比较短:awk-F'[:]'{print$5}“/opt/users | sort | uniq-c | sort-rn | head-1感谢您的帮助!但是我不得不选择前面的答案作为解决方案,并在我的任务中使用它,因为它较短:awk-F”[:“{print$5}”/opt/users | sort | uniq-c | sort-rn | head 1