awk如何把一个文件按第三列去重并统计重复个数最后按倒叙排列
时间: 2023-09-09 08:05:12 浏览: 128
### 回答1:
可以使用awk命令来实现按第三列去重并统计重复个数,最后按倒序排列的操作。
具体的命令如下所示:
```
awk '{a[$3]++} END {for (i in a) print i,a[i] | "sort -rnk2"}' 文件名
```
解释一下上述命令:
- awk:命令名。
- '{a[$3]++}:以第三列作为关键字,将每一行的第三列的值作为数组a的下标,数组a的值加1,即对每一个不同的值计数。
- END:表示对整个文件处理完毕后执行操作。
- {for (i in a) print i,a[i] | "sort -rnk2"}':输出结果并倒序排列。其中,for (i in a)表示遍历数组a的所有元素,print i,a[i]表示输出第三列和对应的计数,最后使用sort命令对第二列计数进行逆序排序。
- 文件名:待处理的文件名。
通过执行上述命令,即可实现按第三列去重并统计重复个数,最后按倒序排列的操作。
### 回答2:
awk可以通过使用数组来按照第三列去重并统计重复个数。下面是实现这个功能的一种方法:
1. 创建一个数组,用于保存每个不重复的第三列的值以及对应的重复个数。
2. 逐行读取文件的内容,使用$3作为数组的索引。
3. 检查数组中是否已经存在该索引。如果存在,则将对应的重复个数增加1;否则,将索引添加到数组中,并且将对应的重复个数初始化为1。
4. 读取完文件之后,打印数组中的内容,并按照重复个数进行倒序排列。
下面是一个示例的awk命令:
```shell
awk '{count[$3]++} END {for(index in count) print index, count[index]}' 文件名 | sort -k2,2rn
```
这个命令中,`count[$3]++`表示每次读取一行时,都会把第三列的值作为数组`count`的索引,并将对应的值加1。`END`表示读取完整个文件之后执行的操作。接着,使用`for`循环遍历数组`count`,通过`print`语句打印索引和对应的值。最后,使用`sort`命令按照第二列进行倒序排列,其中`-k2,2rn`表示按照第二列的数值进行逆向排序。
这样,awk就可以将文件按照第三列去重并统计重复个数,最终按照重复个数的倒序排列输出。
### 回答3:
使用awk命令可以很方便地实现按第三列去重并统计重复个数,然后按照倒叙排列的操作。
首先,我们可以使用awk的数组来存储第三列的值,并统计每个值出现的次数。具体步骤如下:
1. 定义一个空数组count来存储第三列的值和对应的出现次数:count[$3]=0。
2. 对文件进行逐行处理,将第三列的值作为索引,在count数组中对应的值加1:count[$3]++。
3. 完成对文件的处理后,将数组中的内容逆序输出:for(i in count) { print i,count[i] } | sort -k2rn。
整个awk命令如下所示:
```bash
awk '{ count[$3]++ } END { for(i in count) { print i,count[i] } }' yourfile.txt | sort -k2rn
```
将上述命令中的yourfile.txt替换为要处理的文件路径,即可得到按第三列去重并统计重复个数的结果,并按照倒叙排列。
注意,这里使用了sort命令对结果进行倒叙排列,通过-k2rn参数指定按第二列数字逆序排序。
阅读全文