awk境界はパターンの始まりです

awk境界はパターンの始まりです


1次のように失敗するtryパターンの開始範囲または境界を設定するためにawkを取得する方法

$ echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '1,/end/ {print $0}'
a
b
c
end
e
f
g

パターンが機能するため、これはすべての人に適用されます。

$ echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '/b/,/end/ {print $0}'
b
c
end

しかし、再び質問に戻ってパターンが始まる範囲または境界を取得する方法は何ですか?

ベストアンサー1

2行と4行の間に線を追加するには:

awk 'NR ==2, NR == 4' file

目的がとのregex1間の行を得るregex2ことであれば、NR式を正規表現に置き換えることができます。

awk '/regex1/, /regex2/' file

より詳細な形式は次のとおりです。

awk '$0 ~ /regex1/, $0 ~ /regex2/ { print $0}' file

〜のようにその他の回答提案全行文字列の一致上記の表現はこのコマンドからのものです。この答えは読書に説得力があります。

awk '$0 == "b", $0 == "end" { print $0}' file

awk '/b/, /end/' fileあなたが得たいと思うもののため。

これで、NR式と正規表現を保持する2つの方法を組み合わせることができます。

awk '/b/, NR == 4' file

または

awk 'NR == 2, /end/' file

echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk '1,/end/ {print $0}'awkこのコマンドでは、ライン1(レコード数が1の場合、つまりNR == 1)で始まる必要があることを知らせる必要があります。

これは:

echo -e 'a\nb\nc\nend\ne\nf\ng\n' |awk 'NR == 1,/end/ {print $0}'

これはうまくいきます。

おすすめ記事