grep、sort、およびuniqを使用して3つの出力フィールドを作成する方法

grep、sort、およびuniqを使用して3つの出力フィールドを作成する方法

私のコマンドは2つのファイルを使用していますが、最初のファイル(file1)はアルファベットの各文字が別々の行にあるファイルです。 2番目のファイル($w私のコマンドでは)は巨大な単語のリストです。アルファベットリストと単語リストを比較して、アルファベット文字を2回含む単語を見つけ、各文字の単語数とサンプル単語を表示する必要があります。出力は次のとおりですが、アルファベット全体について

v 94 bivalve
w 94 awkward
x 3 executrix
y 196 abysmally
z 58 bedazzle

以下は私のコマンドとその結果です

 for i in `cat file1`; do grep $i.*$i $w | sort | uniq -c | head -1; done
  1 aardvark    
  1 abba
  1 acacia
  1 abandoned
  1 abalienate
  1 affability
  1 ageing
  1 aforethought
  1 abalienation
  1 hajj
  1 backstroke
  1 abnormally
  1 accommodate
  1 abalienation
  1 abdominous
  1 agitprop
  1 quinqevalent
  1 aardvark
  1 abbess
  1 abatement
  1 absquatulate
  1 bivalve
  1 awkward
  1 executrix
  1 abysmally
  1 bedazzle

ベストアンサー1

比較的新しいバージョンを使用すると仮定すると、bash同様のことができます。

for CHAR in {a..z}
do
    WORD_LIST=( $(grep "$CHAR.*$CHAR" $w) )
    echo $CHAR ${#WORD_LIST[@]} ${WORD_LIST[0]}
done

私たちはサイズの数を提供するbash配列を使用しており、配列${#WORD_LIST[@]}の最初の要素を取得しています${WORD_LIST[0]}

あなたの例がうまくいかないのは、一意のインスタンスのみを計算するuniq -cため、渡されたすべての単語の数ではなく各単語の数を提供し、最初の出力のみを取得できるからです。

おすすめ記事