Linux脚本练习之script068-第二列是否有重复

Posted 二木成林

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux脚本练习之script068-第二列是否有重复相关的知识,希望对你有一定的参考价值。

script068

题目

注:题目来源于 SHELL10 第二列是否有重复

给定一个 nowcoder.txt 文件,其中有 3 列信息,如下实例,编写一个 shell 脚本来检查文件第二列是否有重复,且有几个重复,并提取出重复的行的第二列信息。实例:

20201001 python 99
20201002 go 80
20201002 c++ 88
20201003 php 77
20201001 go 88
20201005 shell 89
20201006 java 70
20201008 c 100
20201007 java 88
20201006 go 97

结果:

2 java
3 go

脚本一

思路就是提取文本中的第二列内容,然后对其进行排序去重,统计每个去重后单词的出现次数,最后筛选出出现次数大于等于 2 的单词。

cat nowcoder.txt | sort -k 2 | awk 'print $2' 表示提取文件中的第二列并排序;uniq -c 表示对第二列进行去重并统计每行单词的出现次数;awk 'if($1>=2) print $0' 表示筛选出出现次数大于等于 2 的行;sort -nr -k 1 表示安装词频升序排列;sed 's/^[ \\t]*//g' 表示去除行首的空格。

cat nowcoder.txt | sort -k 2 | awk 'print $2' | uniq -c | awk 'if($1>=2) print $0' | sort -nr -k 1 | sed 's/^[ \\t]*//g'

脚本二

同脚本一基本一致。

awk 'print $2' nowcoder.txt | sort | uniq -c | sort -n -k 1 | awk 'if($1>=2) print $0' | sed 's/^[ \\t]*//g'

脚本三

将文件中每一行第二列的单词存储到关联数组中,键名是单词,键值是该单词的出现次数,这步操作在 中完成;接着在 END 中通过循环遍历关联数组中,筛选出单词出现次数大于 2 的词汇,并打印它们的出现次数和词汇。

awk 'map[$2]++ ENDfor(k in map) if(map[k]>=2) printf("%d %s\\n", map[k], k)' nowcoder.txt

以上是关于Linux脚本练习之script068-第二列是否有重复的主要内容,如果未能解决你的问题,请参考以下文章

Linux脚本练习之script025-判断用户输入的参数是否为正整数。

Linux脚本练习之script092- 判断输入的是否为IP地址

Linux脚本练习之script092- 判断输入的是否为IP地址

Linux脚本练习之script061-输出7的倍数

Linux脚本练习之script014-判断参数文件是否为 `.sh` 后缀的普通文件,如果是,则添加所有人可执行权限,否则提示非脚本文件。

Linux脚本练习之script086-etstat练习之查看各个状态的连接数