awk + ​​从第一行打印行直到匹配单词

awk + ​​从第一行打印行直到匹配单词

我想打印文件中直到匹配单词的所有行,请建议如何使用 awk 做到这一点

例如

我想打印直到单词 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

答案1

尝试:

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

答案2

或者使用与第一行匹配的范围模式(NR 等于 1),直到行中第一次匹配“PPP”

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

如果该行必须与“PPP”完全匹配,则仅使用

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

如果您想对参数列表中的每个文件执行相同的操作,请使用 FNR 变量,该变量将每个已处理文件的第一行重置为 1

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

答案3

正如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

相关内容