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 한 줄 문제입니다.

패턴은 다음과 같습니다

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

관련 정보