我有一个脚本,可以从文件中抓取每一行并列出计数,但我还想要的是仅抓取第 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
我想到了两种方法:
用于
sort
获取独特的线条:COMM_CONT=$(awk -F ',' '/COMM_CONT/{print $3;}' $1 | sort -u | wc -l)
在 awk 中完成工作
COMM_CONT=$(awk -F, ' $3 ~ /COMM_CONT/ && !($3 in seen) {seen[$3]=1; count++} END {print count} ' $1)