【发布时间】:2013-05-29 16:52:05
【问题描述】:
如果匹配,我需要匹配一些模式我需要打印接下来的几个单词。我只有三个这样的条件要匹配……但我只需要打印满足第一个条件后出现的那些单词。 . 即..
虽然在 LLL SSS 之前我有 TTT ,但我只需要将 LLL SSS 之后的那些打印到 AAA RRR ,当我遇到 LLL SSS 需要做同样的事情时,我尝试声明一个 awk 标志变量,但是它似乎不起作用。请帮助我。
var1="LLL";var2="SSS";var3="TTT";var4="AAA";var5="RRR";
awk -v flag=1 '{
for (m=1;m<=NF;m++)
if($m~m/'$var1'/ && $(m+1)~/'$var2'/)
print "ABCD: ", $(m+2),$(m+3),$(m+4)
{flag=0};
else {
if {flag==0 && $m~/'var3'/)
print "EFG : ", $(m+1);
else {
if (flag==0 && $m~/'$var4'/ && $(m+1)~/'var5'/)
print "HIJ: ",$(m+2),$(m+3)
{flag=1};
}
}
}
}' fliename
我的文件是这样的:
AAA RRR H I
DDDD OOO HI J UGC RR
TTT YYY
LLLLL IIIIII
LLL SSS A B C D
N
DDDD TTT EFG
BBB AAA RRR J K
HHHHHH RRRRRR
LLL SSS E H G H
N
DDDD TTT EFG
UUUUU BBB AAA RRR J K
【问题讨论】:
-
你的预期输出是什么?
-
拥有一个名为
flag的标志就像有一个孩子并将其命名为kid。来吧...还有一些缩进怎么样? -
而且,您的代码语法没有多大意义。连编辑都很难。
-
如果您想将字段与令牌匹配,请不要使用正则表达式。在这种情况下太不准确了。您还可以使用
ENVIRON["var1"]哈希读取 awk 中的环境变量。您可以测试一个字段匹配,例如if ($m == ENVIRON["var1"])。 -
@glennjackman:你是对的!或致电
var1=LLL var2=SSS awk '...'。