我有多个文件和不同版本的文件。我需要如何从每个文件中选择编号最高的版本

我有多个文件和不同版本的文件。我需要如何从每个文件中选择编号最高的版本

我有多个文件和不同版本的文件。我需要如何从每个文件中选择编号最高的版本。

前任:

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 脚本GNUdatamash找出最大值:

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

用法:

$ ./example.sh input.txt
ac-2,bc-2

相关内容