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


8

マッチワードまでのすべての行をファイルから出力したい

例えば

PPPという単語まですべての行を印刷したい

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

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

回答:


12

試してください:

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

5
上記と同じsedsed '/PPP/q' infile
Costas 2014年

@Costas:はい、OPは必要なawkので、他のツールを提供しません。
cuonglm 2014年

最初の1は、常に一致する完全なステートメント "// {print $ 0}"のようなものです。これがないと、awkは印刷しません。
cidermole

@cidermole:厳密には違います。1のよう{print $0}です。また、//は空のパターンであり、結果は指定されていません。それの仕事gawkmawkブライアン・カーニハン自身のバージョンではなくでnawkoawk家宝ツールチェストから。
cuonglm 2015年

sedソリューションをありがとう!私はそれをやりたいだけで、ツールは気にしません
アーロン・マクミリン2017年

6

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

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

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

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

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

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

2

OPが言ったように、ファイルの最初の行または単語には任意の単語(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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.