点击跳转到力扣:
题目:
- 写一个 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去做的