我有多个文件和不同版本的文件。我需要如何从每个文件中选择编号最高的版本。
前任:
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