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

Программа makeустанавливает переменную MAKE, которая может использоваться в make-файлах как $(MAKE)или ${MAKE}. Последнее полезно, потому что сценарии оболочки распознают этот синтаксис, и можно повторно использовать некоторые фрагменты сценария между ними.

Помимо этого, между синтаксисом shell/make не так много совпадений, поскольку makeобрабатывает такие вещи, как $$, иначе, чем shell.

Обращение к сути вопроса :переменная MAKEпомогает с рекурсией, так как программа на самом деле не может быть названа make(, например, gmake, pmake), и вам нужен этот бит информации, чтобы успешно повторяться в той же программе. Программа make(, однако она (re )с именем )), распознает эту рекурсию независимо от того, используется переменная или нет.

Дополнительная литература:Создание POSIX

-2
24.03.2020, 13:57
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
28.04.2021, 23:19

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

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

Использование:

$./example.sh input.txt
ac-2,bc-2
0
28.04.2021, 23:19

Теги

Похожие вопросы