0

name pattern に一致するファイルを含むディレクトリがありますA-B.diff。ここで、ABは数字です。例:

100885-40843.diff
100885-41535.diff
100886-40500.diff
101036-41762.diff
101036-42346.diff
101038-42010.diff
101038-42127.diff
101038-43258.diff
101038-43873.diff

以下の基準に一致するこれらのファイルのリストを取得したいと思います。

  • すべてのA場合、ファイルは1つだけです
  • B与えられたもので利用可能な最大値を持つA

したがって、指定されたファイルのリストは次のようになります。

100885-41535.diff
100886-40500.diff
101036-42346.diff
101038-43873.diff
4

2 に答える 2

3

sortandを使用する 1 つの方法uniq

sort -t- -r -k2 | sort -t- -rs | uniq -w6

-t-区切り記号をマイナス記号に設定し、-k2並べ替える 2 番目の列を選択し、-r最大から最小に-s並べ替え、並べ替えを安定させます。次に、最初の 6 文字のみをチェックする点を除いて、(ソートされたリストから一意の行を選択する)uniq -w6と同じです。uniqこのコマンドを実行すると、行は と でソートされA、最初に出現BするそれぞれAの が最大Bになるため、uniqその行が選択されます。入力すると、これにより出力が表示されます

101038-43873.diff
101036-42346.diff
100886-40500.diff
100885-41535.diff

リストを自然な順序にしたい場合は、別のリストを追加できると思いますsort -n(番号でソート)。

于 2013-06-27T11:33:48.383 に答える
1

If you store data in a file, this makes it:

$ awk -F"[-.]" '{if ($2 > a[$1]) a[$1]=$2} END{for (i in a) printf "%s-%s.diff\n",i, a[i]}' file
100885-41535.diff
100886-40500.diff
101036-42346.diff
101038-43873.diff

Loops through the list of files creating an array with a[1st part] = biggest 2nd part.

于 2013-06-27T11:14:36.183 に答える