2

次のようなdebianパッケージと同じ形式のバージョンとビルド番号を持つビルドタグを表すエントリを含むテキストファイルがあります。

nimbox-apexer_1.0.0-12
nimbox-apexer_1.1.0-2
nimbox-apexer_1.1.0-1
nimbox-apexer_1.0.0-13 

シェルスクリプトを使用して、上記のリストを「version-build」でソートし、最後の行を取得する必要があります。上記の例ではnimbox-apexer_1.1.0-2.

4

5 に答える 5

3

次の方法で最新のビルドを取得します。

cat file.txt | sort -V | tail -n1

今、それを変数にキャッチするには:

BUILD=$(cat file.txt | sort -V | tail -n1)
于 2010-09-02T02:20:50.693 に答える
1
cat file.txt | cut -d_ -f 2 | sed "s/-/./g" | sort -n -t . -k 1,2n -k 2,2n -k 3,3n  -k 4,3n

2n、3n は、そのフィールドに関連すると見なされる文字数です。本当に大きなバージョン番号を使用する場合は、それらを増やしてください...

于 2011-03-31T17:31:33.557 に答える
1
sort -n -t "_" -k2.3 file | tail -1
于 2010-09-02T02:38:59.037 に答える
0

これを行う簡単な方法を見つけることができませんでした。私の問題に似たIPアドレスをソートするコードを見て、状況をその状況に変えようとしています。これが私が思いついたものです。もっと簡単で良い方法があれば教えてください!!!

sed 's/^[^0-9]*\([0-9]*\)\.\([0-9]*\)\.\([0-9]*\)-\([0-9]*\)/\1.\2.\3.\4 &/' list.txt | \
  sort -t . -n -k 1,1 -k 2,2 -k 3,3 -k 4,4 | \
  sed 's/^[^ ]* \(.*\)/\1/' | \
  tail -n 1

したがって、このデータから始めます。

nimbox-apexer_11.9.0-2
nimbox-apexer_1.10.0-9
nimbox-apexer_1.9.0-1
nimbox-apexer_1.0.0-12
nimbox-apexer_1.1.0-2
nimbox-apexer_1.1.0-1
nimbox-apexer_1.0.0-13

最初sedの問題は、元の行を保持して最後に変更を元に戻すソート IP 問題に変換されます。

11.9.0.2 nimbox-apexer_11.9.0-2
1.10.0.9 nimbox-apexer_1.10.0-9
1.9.0.1 nimbox-apexer_1.9.0-1
1.0.0.12 nimbox-apexer_1.0.0-12
1.1.0.2 nimbox-apexer_1.1.0-2
1.1.0.1 nimbox-apexer_1.1.0-1
1.0.0.13 nimbox-apexer_1.0.0-13 

私のsort場合はmayor.minor.release.buildを表す最初の4つの数字を使用して行を注文します

1.0.0.12 nimbox-apexer_1.0.0-12
1.0.0.13 nimbox-apexer_1.0.0-13 
1.1.0.1 nimbox-apexer_1.1.0-1
1.1.0.2 nimbox-apexer_1.1.0-2
1.9.0.1 nimbox-apexer_1.9.0-1
1.10.0.9 nimbox-apexer_1.10.0-9
11.9.0.2 nimbox-apexer_11.9.0-2

最後sedは、並べ替えに使用されるデータを削除します

nimbox-apexer_1.0.0-12
nimbox-apexer_1.0.0-13 
nimbox-apexer_1.1.0-1
nimbox-apexer_1.1.0-2
nimbox-apexer_1.9.0-1
nimbox-apexer_1.10.0-9
nimbox-apexer_11.9.0-2

最後tailに、必要な最後の行を取得します。

于 2010-09-03T00:03:10.013 に答える
0

GNU の場合sort:

sort --version-sort file | tail -n -1

GNUは好きでtailはありませんtail -1

于 2010-09-02T02:51:19.237 に答える