【Shell案例】【awk、grep、sort、uniq】10、第二列是否有重复

本文探讨了如何使用shell脚本结合awk工具检查`nowcoder.txt`文件中第二列的重复情况,以及提取重复次数。错误代码分享后,给出了三种正确的方法,包括awk、管道操作和排序+去重统计,最终结果展示为'2java3go'。
部署运行你感兴趣的模型镜像

给定一个 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

思路:

awk+循环+找第二列计数+打印大于1的值和对应元素

自己写的【错误】

#!/bin/bash
awk '{for(i=1;i<=NF;i++){
    arr[$2]++
}}END{
    for(int j=1;i<=NF;j++){
        if(arr[j]!=1){
            print arr[j] $j
        }
    }
}' nowcoder.txt

方法1:awk文本分析工具

#!/bin/bash
awk '{a[$2]++} END{for(i in a) {if(a[i]>=2){print a[i]" "i}}}' nowcoder.txt

或写成

#!/bin/bash
awk '{a[$2]++} END{for(i in a) {if(a[i]>=2){print a[i],i}}}' nowcoder.txt

方法2:管道

awk '
{
    freqs[$2] += 1
}
END {
    for (x in freqs) {
        print(freqs[x], x)
    }
}
' nowcoder.txt |
awk '
{
    if ($1 > 1) {
        print($0)
    }
}
'

方法3:sort+去重+查找

#!/bin/bash
cat nowcoder.txt|awk '{print $2}'|sort|uniq -c|grep -v '1'|sort -n

sort -n 依照数值的大小排序。

sort 默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出。

uniq -c或--count 在每列旁边显示该行重复出现的次数。【去重的同时,显示重复出现的次数】

3 test 30             #前面的数字的意义为该行共出现了3次  

grep -v 或 --invert-match : 显示不包含匹配文本的所有行。

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值