尝试仅 awk 计算列中的唯一结果而不是计算每一行 -

尝试仅 awk 计算列中的唯一结果而不是计算每一行 -

我有一个脚本,可以从文件中抓取每一行并列出计数,但我还想要的是仅抓取第 3 列中的唯一实例。例如,这些行表示如下图所示的内容,而我当前的脚本计算 COMM_CONT 的所有实例,我真正想要的是它计算具有 COMM_CONT 的唯一行,对于图片来说是 2。

在此输入图像描述

所以我希望下面的脚本能够计算四种模式发生的唯一次数。我觉得这应该是一个简单的修复,但我一直在尝试 -u 和 -uniq ,但我似乎无法让它做到这一点。

#!/bin/bash
ORAL_MICRO=$(awk -F ',' '/ORAL_MICRO/{print $3;}' $1 | wc -l)
LAB_CONT=$(awk -F ',' '/LAB_CONT/{print $3;}' $1 | wc -l)
COMM_CONT=$(awk -F ',' '/COMM_CONT/{print $3;}' $1 | wc -l)
IMMUNE=$(awk -F ',' '/IMMUNE/{print $3;}' $1 | wc -l)
echo $1, $ORAL_MICRO, $LAB_CONT, $COMM_CONT, $IMMUNE >> $2

答案1

我想到了两种方法:

  1. 用于sort获取独特的线条:

    COMM_CONT=$(awk -F ',' '/COMM_CONT/{print $3;}' $1 | sort -u | wc -l)
    
  2. 在 awk 中完成工作

    COMM_CONT=$(awk -F, '
        $3 ~ /COMM_CONT/ && !($3 in seen) {seen[$3]=1; count++}
        END {print count}
    ' $1)
    

相关内容