awk重复行输出重复数,逆排序

本文介绍了一种使用awk命令处理表格数据的方法,通过特定的管道操作实现了数据统计与排序。此方法适用于快速处理大量结构化的文本数据。
 cat mark.all |awk -F '\t' '{a[$1]++}END{for(i in a){print i,a[i] | "sort -k  2nr"}}'
### 使用 `awk` 查找并统计文件或数据流中重复的值 #### 1. 基本原理 `awk` 是一种强大的文本处理工具,能够逐读取输入数据并对每模式匹配和处理。为了查找并统计文件或数据流中重复的值,可以利用 `awk` 的内置变量和数组功能来记录每个值出现的次数。 #### 2. 实现方案 以下是一个典型的实现方式,用于统计文件或数据流中某一列(假设为第 1 列)中各个值的出现频率: ```bash awk '{count[$1]++} END {for (key in count) print key, count[key]}' file.txt ``` - `{count[$1]++}` 部分表示将第 1 列的值作为键存储到关联数组 `count` 中,并对其对应的值加 1。 - `END {for (key in count) print key, count[key]}` 部分表示在所有被处理完毕后,遍历数组 `count` 并打印每个键及其对应出现的次数[^3]。 #### 3. 排序显示结果 如果希望按照出现次数降序排列结果,可以在上述命令的基础上加上 `sort` 工具: ```bash awk '{count[$1]++} END {for (key in count) print key, count[key]}' file.txt | sort -k2 -nr ``` - `-k2` 表示按照第二列(即出现次数)排序。 - `-n` 表示数值排序。 - `-r` 表示降序排列。 这一步骤使得输出更加清晰有序[^3]。 #### 4. 处理整个内容 如果不局限于某一列,而是想统计内容重复情况,可以修改 `$1` 为 `$0`,如下所示: ```bash awk '{count[$0]++} END {for (key in count) if (count[key]>1) print key, count[key]}' file.txt ``` 此处仅打印那些至少出现两次的及其出现次数[^3]。 --- ### 示例场景 假设有以下文件 `data.txt`: ``` apple banana apple orange banana grape apple ``` 运以下命令: ```bash awk '{count[$1]++} END {for (key in count) print key, count[key]}' data.txt ``` 输出将是: ``` apple 3 banana 2 orange 1 grape 1 ``` 进一步使用 `sort` 进排序: ```bash awk '{count[$1]++} END {for (key in count) print key, count[key]}' data.txt | sort -k2 -nr ``` 输出变为: ``` apple 3 banana 2 orange 1 grape 1 ``` --- ### 总结 通过 `awk` 的数组功能,可以高效地统计文件或数据流中重复值的数量。结合其他工具如 `sort`,可以让结果显示得更有条理。这种技术广泛应用于日志分析、IP 地址统计等领域。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值