什么两个状态机来解决这个问题:
#!/bin/awk
BEGIN {
state = 0;
}
{
if(state == 0)
{
if(index($1, "Series" nseries))
{
state = 1
}
}
else
{
if(index($1, "Series") > 0)
{
exit
}
if(index($1, "var1") > 0)
{
idx = index($0, "=")
str = substr($0, idx + 1)
gsub(/^[ \t]+/, "", str)
print str
exit
}
}
}
# eof #
测试文件:
Series1
var1 = temp/data/
Series2
var1 = lost/oldfiles/
Series3
var1 = foo/bar/
Series4
var1 = alpha/betta/
Series5
var1 = /foo/this=bad
Series6
var1 = /foo/Series/
阅读从Series1
var1
:
x=$(awk -v nseries=1 -f solution.awk -- ./my_file.dat)
echo $x
temp/data/
阅读从Series5
var1
:
x=$(awk -v nseries=5 -f solution.awk -- ./my_file.dat)
echo $x
/foo/this=bad
阅读从Series6
var1
:
x=$(awk -v nseries=6 -f solution.awk -- ./my_file.dat)
echo $x
/foo/Series/
希望它能帮助!
x ='awk'$ 1 ==“var1”{print $ 2}'my_file.dat'不是一个有效的命令。你可能想说'x = $(awk'...'文件)',''''周围没有空格。 – fedorqui
'{print $ NF;退出}'应该这样做。 – karakfa