複数のファイルとさまざまなバージョンのファイルがあります。各ファイルで最も高い番号のバージョンを選択するにはどうすればよいですか?
前任者:
ac-1
ac-2
bc-1
bc-2
希望の出力。
ac-2,bc-2
答え1
ファイル名を逆順に並べ替え、各ファイル名の最初の項目を選択できます。
$ cat input
ac-1
ac-2
bc-1
bc-2
$ cat input | sort -r | awk -F '-' '!seen[$1]++'
bc-2
ac-2
awkコマンドは、「-」を区切り文字として使用し、要素(ac、ac、bc、bc)の最初の列が最初に表示される各行を印刷します。もちろん、これはバージョン番号が常に最初の「-」の後に始まると仮定します。
答え2
使用する短いbashスクリプト牛に似た一種の栄養datamash
最大値を見つけます。
#!/bin/bash
mapfile -t files < <(datamash -st'-' -g1 max 2 < "$1")
IFS=,
echo "${files[*]}"
使用法:
$ ./example.sh input.txt
ac-2,bc-2