我已经设法在以下命令的帮助下列出了git标记:
git for-each-ref refs/tags --sort=-taggerdate --format='%(refname)'
如How can I list all tags in my Git repository by the date they were created?中所述。 结果如下:
4.18.038
4.18.039
4.18.040
4.18.041
4.18.042
4.18.043
4.18.044
4.19.001
4.19.002
4.19.003
4.19.004
4.19.005
4.19.006
4.19.007
4.19.008
4.19.009
4.19.010
4.19.011
4.19.012
4.19.013
4.19.014
4.19.015
4.19.016
4.19.017
4.19.018
4.19.019
4.20.000
我想只选择每个版本的最后一次出现(最新)。 例如
4.18.044
4.19.019
4.20.000
我是如何实现这一目标的?
PS。我正在使用带有MINGW32的Windows 7
答案 0 :(得分:3)
$ awk -F. '{a[$1,$2]=$0} END{for (i in a) print a[i]}' test
4.18.044
4.19.019
4.20.000
-F.
将字段分隔符设置为.
'a[$1,$2]=$0
将整个记录的值分配给前两列a
,$1
for (i in a) print a[i]
打印数组的内容
警告
仅当文件已排序时才有效。如果不是,您可以使用sort
并将结果传递给awk
$ sort test | awk -F. '{a[$1$2]=$0} END{for (i in a) print a[i]}'
4.18.044
4.19.019
4.20.000
答案 1 :(得分:1)
我会使用sort
来确保版本列表排序良好:
sort -V file | awk -F '.' '{arr[$2]=$0}END{for (a in arr) {print arr[a]}}'
4.18.044
4.19.019
4.20.000
答案 2 :(得分:1)
仅使用排序:
~$ sort -r f | sort -t. -k1,2 -u
4.18.044
4.19.019
4.20.000
-t
指定分隔符,-k1,2
字段和-u
仅打印1个
答案 3 :(得分:1)
tac file | awk -F'.' '!seen[$1,$2]++' | tac