如何对 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

shell 工具很丑陋,有更好的语言。

答案3

典型的 sed 一行问题。

模式是:

/^"/ {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

相关内容