我有一个脚本来解析TeamCity目录映射文件。该脚本可以工作,但是我想知道为什么将其重构为使用变量会导致它看起来不相关的错误消息,以及如何使用变量仍然可以使它工作。
MAP=/opt/TeamCity/buildAgent/work/directory.map
sed -n -e '1,3d;1,/#/{/#/!p}' $MAP | \
awk ' {
n=split($0,array,"->");
printf(substr(array[1],6) substr(array[2],2,16) "\n");
}
'
此打印
nicecorp::Master 652293808ace4eb5
nicecorp::Reset Database 652293808ace4eb5
nicecorp::test-single-steps 652293808ace4eb5
nicecorp::Develop 652293808ace4eb5
nicecorp::Pull Requests 652293808ace4eb5
几乎是我想要的。
重构失败
但是后来我试图将子字符串提取到变量中,脚本就坏了。我将最后一个printf
语句更改为此
proj=substr(array[1],6);
tcdir=substr(array[2],16);
printf($proj" " $tcdir);
这只是打印此错误,尽管我认为它大致相同?
awk: program limit exceeded: maximum number of fields size=32767
FILENAME="-" FNR=1 NR=1
这个错误似乎有点奇怪,因为我的总输入量约为500个字节,比他们抱怨的字段限制少60倍。
AWK版本:mawk
(1994年)
数据格式($ head -10 directory.map
)
#Don't edit this file!
#Nov 5,2019 1:49:26 PM UTC
--version=2
bt30=nicecorp::Master -> 652293808ace4eb5 |?| Oct 29,2019 4:14:27 PM UTC |:| default
bt32=nicecorp::Reset Database -> 652293808ace4eb5 |?| Oct 30,2019 1:01:48 PM UTC |:| default
bt33=nicecorp::test-single-steps -> b96874cc9acaf874 |?| Nov 4,2019 4:20:13 PM UTC |:| default
bt33=nicecorp::test-single-steps -> 652293808ace4eb5 |?| Nov 5,2019 9:00:37 AM UTC |:| default
bt28=nicecorp::Develop -> 652293808ace4eb5 |?| Nov 5,2019 1:07:53 PM UTC |:| default
bt29=nicecorp::Pull Requests -> 652293808ace4eb5 |?| Nov 5,2019 1:18:08 PM UTC |:| default
#