awkを使用して同じ列数を識別する

awkを使用して同じ列数を識別する

各ファイルには6つの列が含まれています(行数は異なる場合があります)。簡単な例を見てください:

1   0   0   0   0   0

0   1   1   1   0   0

私はどのように多くの一意の列(数字や一致する順序など)を確認したいと思います。この場合は3です。

これを行うための簡単な1行のコードはありますか?ある列を別の列と比較するのは簡単ですが、同じ列を見つける方法は何ですか?

ベストアンサー1

次のパイプラインを使用して一意の列を計算できます。

$ awk '{for (i=1; i<=NF; ++i) a[i]=a[i]$i; } END { for (i in a) print a[i] }' foo \
  | sort -u | wc -l

awkコマンドは入力を転置し、一意の行のみを維持しながら結果行をソートし(-u)、最後にすべての(固有の)行(つまり、転置された列)の数を数えます(wc -l)。

これはNF組み込み awk 変数で、現在のレコードのフィールド数に自動的に設定されます。$ii番目のフィールドを参照して、ENDすべてのレコード処理が完了した後に実行されるように、次のブロックを保護します。 awk は、デフォルトでは空白と空白ではなく、フィールド区切りを使用します。

おすすめ記事