ファイルのすべての行を取得し、数をリストするスクリプトがありますが、私が望むのは、列3の一意のインスタンスのみを取得することです。たとえば、行は下の図のようなものを表し、現在のスクリプトはCOMM_CONTのすべてのインスタンスを計算しますが、実際に必要なのはCOMM_CONTがある唯一の行(図では2)を計算することです。
したがって、以下のスクリプトで4つのパターンが発生する一意の回数を計算したいと思います。私はこれが簡単な修正でなければならないと思いますが、-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
私は2つの方法を考えました。
独自のラインを取得するには
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)