我有多个不同版本的文件名。如何从每个文件名中挑选编号最高的版本。
ganglia-3.7.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.7.2-2.el7.x86_64.rpm
ganglia-devel-3.7.2-2.el7.x86_64.rpm
ganglia-gmetad-3.7.2-2.el7.x86_64.rpm
ganglia-gmond-3.7.2-2.el7.x86_64.rpm
ganglia-gmond-python-3.7.2-2.el7.x86_64.rpm
ganglia-web-3.7.1-2.el7.x86_64.rpm
ganglia-3.8.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.8.2-2.el7.x86_64.rpm
ganglia-devel-3.8.2-2.el7.x86_64.rpm
ganglia-gmetad-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-python-3.8.2-2.el7.x86_64.rpm
ganglia-web-3.8.1-2.el7.x86_64.rpm\BMS-CEI2_BC-ADAP-19.04.1111-4_1.noarch.rpm
BMS-CEI2_BC-ADAP-19.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-ADAP-20.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-19.04.1111-4_1.noarch.rpm
BMS-CEI2_BC-19.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-20.04.1112-4_1.noarch.rpm
glusterfs-cli-3.12.13-1.el9.x86_64.rpm
glusterfs-cli-3.12.13-1.el7.x86_64.rpm
glusterfs-cli-3.13.13-1.el7.x86_64.rpm输出应为:
ganglia-3.8.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.8.2-2.el7.x86_64.rpm
ganglia-devel-3.8.2-2.el7.x86_64.rpm
ganglia-gmetad-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-python-3.8.2-2.el7.x86_64.rpm
ganglia-web-3.8.1-2.el7.x86_64.rpm
glusterfs-cli-3.13.13-1.el7.x86_64.rpm
BMS-CEI2_BC-20.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-ADAP-20.04.1112-4_1.noarch.rpm我经历了一种方法,比如获取前缀并使用ls -v命令来获取版本……喜欢
ganglia
ganglia-debuginfo
ganglia-dlevel
ganglia-web
.....并且使用ls -v prefix* | tail -n 1 ..,我可以得到完美的东西,但仅对于ganglia前缀,我不能获得完美的thing..please帮助我
我能拿到O/P
glusterfs-cli-3.13.13-1.el7.x86_64.rpm
BMS-CEI2_BC-20.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-ADAP-20.04.1112-4_1.noarch.rpm
ganglia-debuginfo-3.8.2-2.el7.x86_64.rpm
ganglia-devel-3.8.2-2.el7.x86_64.rpm
ganglia-gmetad-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-python-3.8.2-2.el7.x86_64.rpm
ganglia-web-3.8.1-2.el7.x86_64.rpm我无法在O/P中获取此ganglia-3.8.2-2.el7.x86_64.rpm
#!/bin/bash
ls -ltr *.rpm |awk '{print $9}' | sed '/^$/d' >> .ALLRPMNAMES.txt
# An associative array
declare -A names
# Iterate across the files, stripping version numbers and saving the name/prefix
for file in *.rpm
do
name=${file%%-[0-9]*} # Assume "-" and a non-zero digit marks the version
((names[$name]++))
done
echo " ${!names[@]}" >> RPMPREFIX.txt
sed -i 's/\s\+/\n/g' RPMPREFIX.txt
sed -i '/^$/d' RPMPREFIX.txt
while read line
do
ls -v $line* | tail -n 1 >> HighversionedRPMSALL.txt
done < RPMPREFIX.txt
grep -Fxvf HighversionedRPMSALL.txt .ALLRPMNAMES.txt | grep -v 'k.sh' >> LowVersionedRPMS.txt发布于 2020-05-18 20:49:37
正如您可能已经了解到的,获取包名列表的一种可能方法是:
list_of_prefixes=$(ls -v *.rpm | sed 's/-[0-9].*$//' | uniq)这背后的假设是,文件名中的连字符-后跟一个数字表示版本字符串的开始。
因此,要只获取每个包的最新版本,您可以尝试:
for prefix in $list_of_prefixes; do
ls -rv $prefix-[0-9]* | head -n1
done您可能已经注意到,我不是以升序列出文件并使用命令tail获取最后一个文件,而是使用选项-r以相反的顺序列出文件,以便使用命令head -n1获取第一个文件。我认为这会更快。
演示:文件的列表:
$ ls
BMS-CEI2_BC-19.04.1111-4_1.noarch.rpm
BMS-CEI2_BC-19.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-20.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-ADAP-19.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-ADAP-20.04.1112-4_1.noarch.rpm
ganglia-3.7.2-2.el7.x86_64.rpm
ganglia-3.8.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.7.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.8.2-2.el7.x86_64.rpm
ganglia-devel-3.7.2-2.el7.x86_64.rpm
ganglia-devel-3.8.2-2.el7.x86_64.rpm
ganglia-gmetad-3.7.2-2.el7.x86_64.rpm
ganglia-gmetad-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-3.7.2-2.el7.x86_64.rpm
ganglia-gmond-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-python-3.7.2-2.el7.x86_64.rpm
ganglia-gmond-python-3.8.2-2.el7.x86_64.rpm
ganglia-web-3.7.1-2.el7.x86_64.rpm
ganglia-web-3.8.1-2.el7.x86_64.rpm
glusterfs-cli-3.12.13-1.el7.x86_64.rpm
glusterfs-cli-3.12.13-1.el9.x86_64.rpm
glusterfs-cli-3.13.13-1.el7.x86_64.rpm包列表:
$ listofprefixes=$(ls -v | sed 's/-[0-9].*$//' | uniq)
$ echo "$listofprefixes"
BMS-CEI2_BC
BMS-CEI2_BC-ADAP
ganglia
ganglia-debuginfo
ganglia-devel
ganglia-gmetad
ganglia-gmond
ganglia-gmond-python
ganglia-web
glusterfs-cli 每个包的最新版本列表:
$ for p in $listofprefixes ; do ls -rv $p-[0-9]* | head -n1 ; done
BMS-CEI2_BC-20.04.1112-4_1.noarch.rpm
BMS-CEI2_BC-ADAP-20.04.1112-4_1.noarch.rpm
ganglia-3.8.2-2.el7.x86_64.rpm
ganglia-debuginfo-3.8.2-2.el7.x86_64.rpm
ganglia-devel-3.8.2-2.el7.x86_64.rpm
ganglia-gmetad-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-3.8.2-2.el7.x86_64.rpm
ganglia-gmond-python-3.8.2-2.el7.x86_64.rpm
ganglia-web-3.8.1-2.el7.x86_64.rpm
glusterfs-cli-3.13.13-1.el7.x86_64.rpm出现条目ganglia-3.8.2-2.el7.x86_64.rpm。
https://stackoverflow.com/questions/61867620
复制相似问题