0

「hi」を含む行から「bye」を含む行に印刷するには、次のようにします。

awk'/hi/./bye/'

「hi」を含む行からファイルの終わりまで印刷するには、次のようにします。

awk'/ hi /、0'

これらの終了条件のいずれかで印刷を終了するようにスクリプトを作成するにはどうすればよいですか?

4

3 に答える 3

5

変数をフラグとしてawk使用する場合p

$ cat file
start
line 2
hi
line 4
bye
end

$ awk '/hi/{p=1}{if (p) print}' file
hi
line 4
bye
end

$ awk '/hi/{p=1}{if (p) print}/bye/{p=0}' file
hi
line 4
bye

より簡潔:

$ awk '/hi/{p=1}p' file
hi
line 4
bye
end

$ awk '/hi/{p=1}p;/bye/{p=0}' file
hi
line 4
bye

しかし、私はこれが好きsedです:

$ sed -n '/hi/,/bye/p' file
hi
line 4
bye

$ sed -n '/hi/,$p' file
hi
line 4
bye
end
于 2013-01-11T15:23:43.857 に答える
2

私はあなたの質問を再フェーズしようとします:

「hi」を含む行から「bye」を含む行までファイルを印刷したいのですが、ファイルに「bye」がない場合は「hi」からEOFまで印刷します。(awk付き)

私の理解が正しければ、実際、あなたは自分自身に答えを与えました:

awk '/hi/,/bye/'  

仕事をします。

でテストしてみましょうawk '/5/,/0/'

kent$  seq 12 |awk '/5/,/0/'
5
6
7
8
9
10

kent$  seq 9 |awk '/5/,/0/'                                                                                                                                                 
5
6
7
8
9

2番目のコマンドでは、「ファイル」に0がないため、/5/から最後まで出力されます。

Note「見つかった」場合は「exit」を処理する必要があります。そうしないと、「bye」の後に「hi」を含む行がある場合は、それらも出力されます。

これがあなたが求めていたものであることを願っています。

于 2013-01-11T15:48:17.143 に答える
0
awk '/hi/{f=1} f; /bye/{f=0}' file

区切り行のいずれかまたは両方を印刷する場合は、これら3つの条件を並べ替えるだけです。

于 2013-01-11T17:28:32.360 に答える