用awk特殊印刷

时间:2016-07-05 15:18:53

标签: git bash awk

我想用awk打印我的git分支,我只想要分支名称,没有原点而不知道我的工作副本是什么。 我提出了git branch -r | awk -F' ' '{print $1}',但结果如下:

origin/Dev
origin/HEAD
origin/master

所以我尝试了git branch -r | awk -F'/' '{print $2}',结果是:

Dev
HEAD -> origin
master
  1. 我只能使用分支名称的方式是什么? (我不关心“git”解决方案,我想知道如何用awk实现这一点)
  2. 如何在同一行中用逗号替换换行符?例如,我的目标是看到这样:

    Dev,HEAD,master
    
  3. 感谢。

5 个答案:

答案 0 :(得分:1)

 ... | awk -F' +|/' -v ORS=, '{if($3!="HEAD") print $3}'

答案 1 :(得分:1)

这将打印出所需的结果,逗号分隔的字符串

git branch -r | awk '
    BEGIN { firstBranch = 1 }

    # split branch off from remote
    { branch = substr($1, index($1, "/") + 1) }

    # eliminate HEAD reference
    branch == "HEAD" { next }

    # output comma between branches
    !firstBranch { printf "," }
    firstBranch { firstBranch = 0 }

    # output branch name
    { printf branch }

    # final linebreak
    END { print "" }
'

或作为没有评论的单行

git branch -r | awk 'BEGIN { firstBranch = 1 } { branch = substr($1, index($1, "/") + 1) } branch == "HEAD" { next } !firstBranch { printf "," } firstBranch { firstBranch = 0 } { printf branch } END { print "" }'

答案 2 :(得分:0)

应该这样做:

awk -v OFS="," '{ n = split($1, a, /\//); branches[++b] = a[n] } 
    END { for (i = 1; i <= b; ++i) printf "%s%s", branches[i], (i<b?OFS:ORS) }'

这将获取每个本地分支的最后一部分(它假定您的本地分支在其名称中没有/)。它将每个名称存储在一个数组中,然后将它们打印出来,用逗号分隔(使用OFS),后跟换行符(使用ORS)。

在将分支添加到数组之前添加条件if (a[n] != "HEAD")会很容易。

答案 3 :(得分:0)

git branch -r | awk -F/ '{sub(/[[:space:]]*->.*$/,"")}{print $NF}'

应该这样做。

<强>输出

Dev
HEAD
master

答案 4 :(得分:0)

这是我的例子:

git branch|awk '{print ($1=="*" ? $2 : $1)}'|awk 'ORS=NR?",":"\n"'

git branch - 打印分支,
awk '{print ($1=="*" ? $2 : $1)}' - 在当前分支之前打印名称,而不是*
awk 'ORS=NR?",":"\n"' - 将\n替换为,

我的结果是:

ZIIPR-1247,ZIIPR-Config,develop,master,stage

希望这是最简单的例子......