我有一個在一個什么樣的空間大小不均的空間分隔的串列將是第一列。我想按其字串后出現的第一個數字對其進行反向排序。我需要使用 bash 命令來做到這一點。
例子:
Pontiac Firebird 19.0 6 250.0 100.0 3282. 15.0 71 US
Pontiac J2000 SE Hatchback 31.0 4 112.0 85.00 2575. 16.2 82 US
Oldsmobile Delta 88 Royale 12.0 8 350.0 160.0 4456. 13.5 72 US
Oldsmobile Omega 11.0 8 350.0 180.0 3664. 11.0 73 US
AMC Gremlin 20.0 6 232.0 100.0 2914. 16.0 75 US
AMC Gremlin 21.0 6 199.0 90.00 2648. 15.0 70 US
Pontiac Lemans V6 21.5 6 231.0 115.0 3245. 15.4 79 US
會變成:
Oldsmobile Omega 11.0 8 350.0 180.0 3664. 11.0 73 US
Oldsmobile Delta 88 Royale 12.0 8 350.0 160.0 4456. 13.5 72 US
Pontiac Firebird 19.0 6 250.0 100.0 3282. 15.0 71 US
AMC Gremlin 20.0 6 232.0 100.0 2914. 16.0 75 US
AMC Gremlin 21.0 6 199.0 90.00 2648. 15.0 70 US
Pontiac Lemans V6 21.5 6 231.0 115.0 3245. 15.4 79 US
Pontiac J2000 SE Hatchback 31.0 4 112.0 85.00 2575. 16.2 82 US
我試著做sort -nr看看會發生什么,它反向排序串列,但相對于它的字母順序。我想根據所有值進行排序。
訣竅是我必須保持空間分隔。使用 bash 執行此操作的最佳方法是什么?
uj5u.com熱心網友回復:
我必須保持空間分隔
您的意思是,結果必須再次以空格分隔,對嗎?在處理程序中,您可以隨意轉換輸入。
假設您知道一個從未出現在您的檔案中的字符,請使用 分隔要按該字符sed排序的值,然后按該值排序,然后再次洗掉其他分隔符。(這個程序基本上是一個施瓦茲變換。)
這里我們使用鐘形字符\a來分隔排序的鍵。該字符不太可能出現在文本檔案中。
sed -E 's/ ([0-9] \.[0-9] ) / \a\1\a /' | sort -t $'\a' -k2,2n | tr -d \\a
uj5u.com熱心網友回復:
這是一個簡短的 ruby?? 程式:
ruby -e '
puts IO.readlines(ARGV.shift, chomp: true)
.map {|line|
fields = line.split
[fields[0..(fields.size - 9)].join(" ")] fields[-8 .. -1]
}
.sort_by {|row| row[1]}
.map {|row| row.join(" ")}
.join("\n")
' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/348800.html
上一篇:為什么ReactNative的性能比WebView好?如果他們使用相同的JavascriptEngineV8?
下一篇:代碼跳轉到未參考的共享物件
