web-dev-qa-db-ja.com

色データもある列を並べ替える方法は?

ログファイルがあり、応答時間の4番目のフィールドに従ってソートしようとしています。

GET /api/user/john 200 0.194 ms - 7307

ただし、色タグが含まれています。以下がviの出力です。

^[[0mGET /api/user/john ^[[32m200 ^[[0m0.194 ms - 7307^[[0m

これを行う簡単な方法はありますか?

4
d9ngle
  1. ソートするフィールドを抽出し(通常はcutsedまたはawkを使用)、そのフォーマットエスケープシーケンスを取り除きます。 2番目の部分のスクリプトは スクリプト出力からの制御文字(コンソールコード/色を含む)の削除 にあります。以下のuncolorを使用して、これらのスクリプトの1つを表します。
  2. 結果を元の(paste)と照合します。並べ替えるには、データに表示されない区切り文字を使用します。
  3. ソート。
  4. ソートキーを削除します。

たとえば、フィールドがタブ区切りの場合:

<input-file.txt cut -f 4 | uncolor |
paste - input-file.txt |
sort |
cut -f 2-