在命令行上,其工作方式如下:
svn log "$src_url" --stop-on-copy \
| awk -v RS="--+" -F'|' ' /ticket-101/{print $1}' \
| grep "^r" \
| cut -d"r" -f2 \
| cut -d" " -f1
输出:
6359
6358
6263
6241
6240
6239
6238
6237
6236
当硬编码票号时,脚本工作,但当我将其指定为变量时,脚本不起作用。我可能需要提供多张票,因此需要这样做。
#!/usr/bin/bash
src_url="$1"
itrack=ticket-101
for ticket in "$itrack"; do
echo $ticket
revs=($(IFS=$'\n';
svn log "$src_url" --stop-on-copy \
| awk -v RS="--+" -F'|' ' /"$ticket"/{print $1}' \
| grep "^r" \
| cut -d"r" -f2 \
| cut -d" " -f1 \
| sort -r
))
for revision in ${!revs[*]} ; do
echo ${revs[$revision]}
done
done
Output gives nothing.
我想解析的svn
命令的输出是:
$ svn log http://test.svn.com/svn/demo_project --limit 5
------------------------------------------------------------------------
r1000 | testuser25 | 2013-06-13 13:37:10 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-1135
------------------------------------------------------------------------
r999 | testuser20 | 2013-06-13 13:26:46 -0400 (Thu, 13 Jun 2013) | 2 lines
ticket-1135
------------------------------------------------------------------------
r998 | testuser30 | 2013-06-13 12:12:12 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-122
------------------------------------------------------------------------
r997 | testuser25 | 2013-06-13 12:09:56 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-11
------------------------------------------------------------------------
r900 | testuser40 | 2013-06-13 12:09:53 -0400 (Thu, 13 Jun 2013) | 1 line
ticket-113
------------------------------------------------------------------------
如果输入为:/run.sh http://test.svn.com/svn/demo_project ticket-1135 ticket-122 ticket-113
所需的输出是:
900
998
999
1000
答案 0 :(得分:1)
要将shell脚本变量的值传递到awk
,您应该使用-v
选项,如下所示:
awk -v tick="$ticket" -v RS="--+" -F'|' ' $0~tick{print $1}'
不要执行unxnut建议的内容,因为$1
将被解释为脚本的第一个参数,不记录中的第一个字段awk
。
这可能暂时解决您的问题,但您的脚本中有一些非常糟糕的做法,为了得到一些实际帮助,您应该告诉我们您要做什么,显示输入和预期输出,我们可以显示正确的方法。
答案 1 :(得分:0)
这应该为您提供修订列表
revs=($(svn log "$src_url" --stop-on-copy \
| awk -v RS='--+\n' -F'|' '/'"$ticket"'\n/{sub(/^r| $/,""); print $1}'
))
awk
的{{1}}来删除前导sub()
以及修订号后面的尾随空格。如果您想循环浏览所有修订
r