次のファイルがあります。
line1
line2
line3
line4
line5
line6
line7
line5
line2
line1
との間のデータを取得したいですline5
。私はそれを使用しましたawk '/line1/,/line5/' myfile
。予想される出力は次のとおりです。
line1
line2
line3
line4
line5
しかし、awkは最後の試合まで読みますline5
。私はawkが最後の試合ではなく、最初の試合で停止したいと思います。
ベストアンサー1
問題を再現できません。 awk *は私が期待どおりに行います。最初の出現の間からline1
最初の出現までのすべての行を印刷しますline5
。
$ awk '/line1/,/line5/' file
line1
line2
line3
line4
line5
line5
ファイルの5行目の文字列に印刷されない隠し文字がありますか?これがawk
一致しない理由を説明します。
そのコマンドを実行して再確認できますsed
。
$ sed -n '/line1/,/line5/p' file
line1
line2
line3
line4
line5
すべての行を印刷しない(デフォルトの動作)を示しますが、最初の出現から最初の出現までのすべての-n
行を印刷するように指示します。sed
/line1/,/line5/p
line1
line5
ただ印刷したい場合最初パターンに一致する行で始まりline1
、一致する行で終わる行セットを作成するには、line5
次のようにします。
sed -n '/line1/,$p;/line5/q' file
*gawk
GNU実装を使用して確認しました(Kusalanandaはこれがawk
OpenBSDでもawk
正しいmawk
ことをすることを確認しました)。