web-dev-qa-db-ja.com

awk +最初の行から一致する単語までの行を出力する

マッチワードまでのファイルからすべての行を印刷したいawkでそれを行う方法をアドバイスしてください

例えば

Word PPPまですべての行を印刷したい

最初の行はAAA(任意のWord)と異なるはずであることに注意してください

cat file.txt

AAA   ( the first line/Word chuld be any Word !!!!! )
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
MMM
(((
&&&

これを入手する必要があります

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP

他の例(KJGFGHJまで印刷したい)

 cat file.txt1

 HG
 KJGFGHJ
 KKKK

だから私は取得する必要があります

 HG
 KJGFGHJ
8
maihabunash

試してください:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
12
cuonglm

または、行の「PPP」が最初に一致するまで、最初の行に一致する範囲パターン(NRは1に等しい)を使用します。

awk 'NR==1,/PPP/' file

行が「PPP」と完全に一致する必要がある場合は、

awk 'NR==1,/^PPP$/' file

引数リストの各ファイルに対して同じことを行う場合は、処理された各ファイルの最初の行で1にリセットされるFNR変数を使用します

awk 'FNR==1,/PPP/' file1 file2 ...
6
user531214

OPが言ったように、最初の行またはファイルのWordには任意のWord(PPP自体など)を含めることができるので、それを確認し、最初の行が一致しないようにエスケープし、awkが終了しないようにする必要があります。そこ。

次に、これを試すことができます:

入力ファイル:

PPP # the first line/Word chuld be any Word !!!!! )
BBB
$$$
JJJ
OOO
PPP
345
PPP
%%%

コマンド:

awk '1;/PPP/{if (NR>1) exit}' file

出力:

PPP # the first line/Word chuld be any Word !!!!! )
BBB
$$$
JJJ
OOO
PPP
2
αғsнιη