0

次の形式のファイルがあります。

key value:value:value:value
key value:value
key value
key value:value:value

ここで、最初の列にキーがあり、2 番目の列には : で区切られた値のリストがあります。の出現回数に基づいてこのファイルを並べ替えることができるコマンドはありますか:

key value:value:value:value
key value:value:value
key value:value
key value
4

1 に答える 1

2

迅速かつ汚い:

awk -F: '{$0=NF"#"$0}1' file|sort -nr|sed 's/.*#//' 

あなたの例でテストしてください:

kent$  echo "key value:value:value:value
key value:value
key value
key value:value:value"|awk -F: '{$0=NF"#"$0}1'|sort -nr|sed 's/.*#//'
key value:value:value:value
key value:value:value
key value:value
key value

編集

Linux/Unix ボックスのソート ツールは非常に強力です。ただし、何らかの計算に基づくのではなく、列/フィールドに対してソートします。あなたの要件は、最初に計算を行い、結果に対してソートする必要があります。

したがって、のカウントである新しい列を追加し、:並べ替えコマンドで並べ替え、最後にその列を削除します。

awk adds the column
sort does sort
sed removes that column

これらのパイプを削除して出力を確認すると、それがどのように機能したかがわかります。

于 2013-03-01T17:42:10.933 に答える