Ubuntuサーバーでこのファイルの特定の文字列行をソートする方法は?

Ubuntuサーバーでこのファイルの特定の文字列行をソートする方法は?

私は次のような約2,000の情報セットを含む非常に長いファイルを持っています。http://pastebin.com/raw/vKxRNviT

ドル残高に基づいて、最も高いものから低いものの順に整理する必要があります。天びんと上記の引用符の中にある長い英数字文字列だけが必要です。他の情報は必要ありません。 grepや他のプロセスを使ってこれを行うにはどうすればよいですか?

答え1

GNU grep、GNU sed、GNU sort、awk を使用します。

grep -e '{' -e 'dollar' file | sed '/{/{N;s/\n//}' | sort -t = -k2nr | awk -F'[="]' '{print $2,$4}'

出力:

01d6e250-9e4f-495b-92c2-a8fac850f4d6 877164.34
01eea52c-0419-40b3-838f-6cd5300d4393 101149
00315457-ca9e-4c45-87e6-eef632acffce 25004
00b5c95a-8a78-4faa-9d13-a83aa20d4702 25000
00e9b66b-3afa-4182-b024-a38cd40c5876 23088
0180df94-40e3-41c9-a390-41c69141c9f4 22403
0216b500-4390-4ef1-8e60-15d731474b1d 11200
0111590b-776b-496f-8511-a2f81bcb010f 10500
017a80b9-80af-41ca-ad4f-3ec4671b2cdb 10056
0114a6b9-c6ff-444f-9673-a5045dfbb2bc 9999
007580c0-f7e7-4f04-8aa5-6c324d929e68 8723
006d28bd-1e08-40d3-a148-5d9e0133aeee 7818
006da420-7f46-449a-a52d-c55e8fd7e0a2 7557
00522450-e244-434d-a753-d16f5ef896c4 6280
0049b90a-c725-4bd2-8d52-fa55f42395b0 500

答え2

ここで:

#!/usr/bin/env ruby

balance = {}

while line = gets
  if line =~ /^\s*"(\S+)"\s* {/
    id = $1
  end
  if line =~ /^\s*dollar-balance=([\d\.]+)/
    dollars = $1
  end
  if id and dollars
    balance[id] = dollars.to_i
    id = nil
    dollars = nil
  end
end

balance.sort_by { |id, dollars| dollars }.reverse.each do |id, dollars|
  puts "#{id} #{dollars}"
end

シェルツールは見苦しく、より良い言語があります。

答え3

一般的なsedは1行の問題です。

パターンは次のとおりです。

/^"/ {s/[^a-zA-Z0-9]//g; h;}; /^ *dollar\-balance/ {s/^[^=]*=//; H; x; s/\n/\t/; p;}

使用法および出力:

$ cat /tmp/file | sed -ne '/^"/ {s/[^a-zA-Z0-9]//g; h;}; /^ *dollar\-balance/ {s/^[^=]*=//; H; x; s/\n/\t/; p;} ' | sort -k2 -n -r 
01d6e2509e4f495b92c2a8fac850f4d6        877164.34
01eea52c041940b3838f6cd5300d4393        101149
00315457ca9e4c4587e6eef632acffce        25004
00b5c95a8a784faa9d13a83aa20d4702        25000
00e9b66b3afa4182b024a38cd40c5876        23088
0180df9440e341c9a39041c69141c9f4        22403
0216b50043904ef18e6015d731474b1d        11200
0111590b776b496f8511a2f81bcb010f        10500
017a80b980af41caad4f3ec4671b2cdb        10056
0114a6b9c6ff444f9673a5045dfbb2bc        9999
007580c0f7e74f048aa56c324d929e68        8723
006d28bd1e0840d3a1485d9e0133aeee        7818
006da4207f46449aa52dc55e8fd7e0a2        7557
00522450e244434da753d16f5ef896c4        6280
0049b90ac7254bd28d52fa55f42395b0        500
0026f0106e024cae8dcd9727e827c4b3        254
011fad686387490d831c76121814f79b        26
0042cb01d6584cfe84f998ba836a57ac        1
02270abe4335492b8d78bf02ebf9c48a        0
01ed770c17bc4b9e9c4811c870432bbe        0
0191ca39bc524335934b7f7b7f26232a        0
018cab6ed54c45bd95cbc297662042ca        0
0148384a33ab487a931402909c64274c        0
0148059b621f44398b1f30152c4ea184        0
01461ff6bbe548a595c1f59e717b756e        0
0126a8d26d4c4721957a59b381bc0c1a        0
009889c364e044f0bc9545f3f7aa7df6        0
007fa95fe5394812988a8b1b6480bc1c        0
007301788b2d4a1a999d7970f57486db        0
0072e6790f2548ab86c0d5b135a40aac        0
003063eebb5647e6bf6107ed6166e3b1        0
00102e85b9ee4b34b6093237faf18c08        0

関連情報