shell:192. 统计词频 和 194. 转置文件

点击跳转到力扣:

题目:

  • 写一个 bash 脚本以统计一个文本文件 words.txt 中每个单词出现的频率。
  • 为了简单起见,你可以假设:
    • words.txt只包括小写字母和 ' ' 。
    • 每个单词只由小写字母组成。
    • 单词间由一个或多个空格字符分隔。
  • 示例:
    
    假设 words.txt 内容如下:
    
    the day is sunny the the
    the sunny is is
    你的脚本应当输出(以词频降序排列):
    
    the 4
    is 3
    sunny 2
    day 1
    

    下列是我的做题:

  • cat words.txt | tr -s ' ' '\n'|sort|uniq -c |sort -r|awk '{print $2" "$1}'
    
    cat:打印文章内容
    
    tr -s:替换字符串 tr -s [原文替换的内容] [要替换的内容] 这里是将空格替换成换行符
    
    sort:默认按照ASCII码值进行排序,排序完后存在重复的,进一步进行去重
     
    uniq -c:去重, -c 表示输出重复出现的字母的次数(格式是 次数 字母)
    
    awk:格式化输出,题目要求说输出 字母 次数,因此是 $2 (空格) $1
    
    # 思路:对文章要打印的内容进行筛选,先分词,
    
    # 将全部的空格变成换行符,再排序,
    
    # 排序完后统计重复出现的次数并且去重,再按照题目意思输出
    
    
    

    提交:

 

点击跳转到力扣:

题目:

  • 给定一个文件 file.txt,转置它的内容。你可以假设每行列数相同,并且每个字段由 ' ' 分隔。
  • 示例:
  • 假设 file.txt 文件内容如下:
    • name age
    • alice 21
    • ryan 30
  • 应当输出:
    • name alice ryan
    • age 21 30
  • awk '{ #这个大括号里的代码是 对正文的处理
        # NF表示列数,NR表示已读的行数
        # 注意for中的i从1开始,i前没有类型
        for (i=1; i<=NF; i++){#对每一列
            if(NR==1){       #如果是第一行
                #将第i列的值存入res[i],$i表示第i列的值,i为数组的下标,以列序号为下标,
                #数组不用定义可以直接使用
                res[i]=$i;   
            }
            else{
                #不是第一行时,将该行对应i列的值拼接到res[i]
                res[i]=res[i] " " $i
            }
        }
    }
    # BEGIN{} 文件进行扫描前要执行的操作;END{} 文件扫描结束后要执行的操作。
    END{
        #输出数组
    	for (i=1; i<=NF; i++){
    		print res[i]
    	}
    }' file.txt

    提交:

  •  

像这种处理文件类的shell题目,也可以采用python去做的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值