だから、次のような入力があります。
start
abcd
sfd
afsdaf
afsaf
end 1
start
sdfo
efsf
end 0
start
sdf
efsf
end 2
したがって、開始と終了(含む)の間の行だけを印刷したいが、行の2番目のフィールドがend
0より大きい場合にのみ印刷したいと思います(したがって、start
and end 1
、start
andの間、andの間end 2
ではありません)。私ができる方法はありますか?start
end 0
答え1
$ awk -v RS= -v ORS='\n\n' '$NF' file
start
abcd
sfd
afsdaf
afsaf
end 1
start
sdf
efsf
end 2
レコードは空行で区切られており、すべて「start」で始まり「end」で終わるため、「start」で始まり「end」で終わるという事実は不適切です。私たちが考慮する必要があるのは、上記のように、各空行で区切られた段落の最後のスペースで区切られたフィールドがゼロではないことです。If RS is null
から探すhttps://pubs.opengroup.org/onlinepubs/9699919799/utilities/awk.htmlRS=
何をすべきかわからない場合。
答え2
awk '
/start/ { toprint=$0 ; save=1; next }
save { toprint = toprint "\n" $0 ; }
/end/ {if (($2> 0) && save) { print toprint ;} save=0 }'
「開始」行が表示されたら、保存を開始してください。保存するには、印刷する内容にデータを追加してください。 「終了」行が表示されている場合は保存していて、2番目のフィールドが0より大きい場合は、現在存在している内容を印刷して保存を中止してください。