首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >词频与-gt

词频与-gt
EN

Stack Overflow用户
提问于 2017-04-18 20:15:11
回答 2查看 81关注 0票数 1

我的代码检查文件中所有单词的频率并显示,但我想知道如何只显示长度大于变量k的单词。下面是我的代码:

代码语言:javascript
运行
复制
#!/bin/bash
if [ $# -eq 0 ]; then

    echo "you need an argument"
    exit 2
fi

echo "Insert k"
read k
for file in $@; do
    if ! [ -f $file ]; then
    echo "Not a file"
    exit 2
    fi
    sed -e 's/\s/\n/g' < $file | sort | uniq -c | sort -nr
done

文件内容:

代码语言:javascript
运行
复制
ceva
ceva
aiurea
sebi
este
cel
mai
smecher

输出:

代码语言:javascript
运行
复制
     2 ceva
     1 smecher
     1 sebi
     1 mai
     1 este
     1 cel
     1 aiurea
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-18 20:21:23

使用awk计算单词长度大于变量的频率:

代码语言:javascript
运行
复制
awk -v k=3 'length() > k { freq[$0]++} END{for (i in freq) print freq[i], i}' file |
sort -rn

2 ceva
1 smecher
1 sebi
1 este
1 aiurea

完整脚本:

代码语言:javascript
运行
复制
#!/usr/bin/env bash
if [[ $# -eq 0 ]]; then
    echo "you need an argument"
    exit 2
fi

read -p "Insert k: " k

for file in "$@"; do
    if [[ ! -f $file ]]; then
       echo "$file is not a file"
       exit 2
    fi

    echo "$file:"
    awk -v k=$k 'length()>k{freq[$0]++} END{for (i in freq) print freq[i], i}' "$file" | sort -rn
done
票数 3
EN

Stack Overflow用户

发布于 2017-04-19 18:27:21

你也可以这样做。

代码语言:javascript
运行
复制
#!/bin/bash

while read -r line; do
    arr+=("$line")
done< <(tr ' ' '\n' < $file | sort | uniq -c | awk '{print $2" "$1}')

for a in "${arr[@]}"; do
    count=$(echo $a|awk '{print $2}')
    if (( count > 2 )); then
        echo $a
    fi
done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43481413

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档