一致する場合は、いくつかのパターンに一致する必要があります。次のいくつかの単語を出力する必要があります。一致する条件は 3 つしかありません…しかし、最初の条件を満たした後に来る単語だけを出力する必要があります。 .
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