回答:
uniqのデフォルトの動作は、7スペース幅の行で頻度を右揃えし、単一のスペースでアイテムから頻度を区切ります。
ソース:https : //www.thelinuxrain.com/articles/tweaking-uniq-c
sedで先行スペースを削除します。
$ sort input | uniq -c | sort -nr | sed 's/^\s*//' > output
perl -pe 's/ *(\d+) /$1\t/'
(ここではいくつかの選択肢)。また、クリップボードにパイプしxclip -selection c
て、スプレッドシートに直接貼り付けます。
FWIWでは、より柔軟に別のソートツールを使用できます。Pythonはそのようなツールの1つです。
#!/usr/bin/python3
import sys, operator, collections
counter = collections.Counter(map(operator.methodcaller('rstrip', '\n'), sys.stdin))
for item, count in counter.most_common():
print(count, item)
sort
上記のプログラムは、ソートされたリストの代わりにハッシュテーブルを使用して重複する行を識別するため、理論的には、これは大きな入力のツールよりも高速です。(残念ながら、同じ数の行を自然な順序ではなく任意の順序で配置します。これは修正でき、2回のsort
呼び出しよりも高速です。)
出力フォーマットの柔軟性を高めたい場合は、print()
およびformat()
組み込み関数を調べることができます。
たとえば、カウント数を8進数で出力し、先頭に0を付け、その後に空白文字ではなくタブを付けて、NUL行終端記号を付けたい場合は、最後の行を次のように置き換えます。
print(format(count, '08o'), item, sep='\t', end='\0')
スクリプトをファイルに保存して、sort_count.py
Pythonで呼び出します。
python3 sort_count.py < input
uniq -c -i | tr -s ' ' | cut -c 2-
先頭の空白をtr -sで単一の空白に変換し、2番目の文字からの出力をcut -cで出力します。