各ファイルには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 変数で、現在のレコードのフィールド数に自動的に設定されます。$i
i番目のフィールドを参照して、END
すべてのレコード処理が完了した後に実行されるように、次のブロックを保護します。 awk は、デフォルトでは空白と空白ではなく、フィールド区切りを使用します。