如何列出终端中特定字符串的最后一次出现

时间:2014-12-01 14:39:10

标签: git sorting awk filter grep

我已经设法在以下命令的帮助下列出了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

4 个答案:

答案 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

    $2 >
  • 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