У меня есть несколько файлов и файл с разными версиями. Мне нужно, как выбрать версию с наибольшим номером из каждого файла.

Пример:

ac-1
ac-2
bc-1
bc-2

Желаемый результат.

 ac-2,bc-2
-2
Jetchisel 24 Мар 2020 в 14:57
2
Совершенно непонятно, что у вас за схема. Отредактируйте свой вопрос, чтобы включить дополнительные сведения и использовать параметры форматирования.
 – 
Panki
24 Мар 2020 в 14:16

2 ответа

Вы можете отсортировать имена файлов в обратном порядке, а затем выбрать первое вхождение каждого имени файла:

$ 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) появился первым. Это, конечно, предполагает, что номер версии всегда начинается после первого «-».

0
cmosig 24 Мар 2020 в 18:30

Короткий сценарий bash, который использует GNU datamash для поиска максимумов:

#!/bin/bash
mapfile -t files < <(datamash -st'-' -g1 max 2 < "$1")
IFS=,
echo "${files[*]}"

Применение:

$ ./example.sh input.txt
ac-2,bc-2
0
Shawn 25 Мар 2020 в 05:07