【问题标题】:How to list the last occurance of a specific string in Terminal如何在终端中列出特定字符串的最后一次出现
【发布时间】:2014-12-02 00:20:59
【问题描述】:

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

【问题讨论】:

    标签: git sorting awk filter grep


    【解决方案1】:
    $ 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
    

    【讨论】:

    • 这很好......当然,只要列表已经排序。如果没有,您可以先使用sort -V,正如 sputnick 在他的回答中提到的那样。
    • @fedorqui 好点!!我已经编辑了我的答案以包含它。谢谢:)
    • git for-each-ref refs/tags --sort=-taggerdate --format='%(refname)' |排序 | awk -F。 '{a[$1$2]=$0} END{for (i in a) print a[i]}' 就像一个魅力。谢谢!
    • 永远不要使用像a[$1$2]这样的数组索引,而是使用a[$1,$2]。如果输入包含a bcab c 行,请考虑每个行为的差异。
    【解决方案2】:

    我会使用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
    

    【讨论】:

      【解决方案3】:

      仅使用排序:

      ~$ sort -r f | sort -t. -k1,2 -u
      4.18.044
      4.19.019
      4.20.000
      

      -t 指定分隔符,-k1,2 指定字段,-u 仅打印其中一个

      【讨论】:

        【解决方案4】:
        tac file | awk -F'.' '!seen[$1,$2]++' | tac
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-17
          • 1970-01-01
          相关资源
          最近更新 更多