awk +从第一行开始打印行,直到匹配单词


8

我想从文件中打印所有行,直到匹配单词,然后建议如何使用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

Answers:


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

开头的1就像一个始终匹配的完整语句“ // {print $ 0}”。没有它,awk不会打印。
cidermole 2015年

@ cidermole:不完全是。1就像{print $0}。另请注意,这//是一个空模式,结果不确定。它的工作gawkmawk布莱恩Kernighan的自己的版本,但不是在nawkoawk从传家宝工具的胸部。
cuonglm

感谢sed解决方案!我只想完成它,也不在乎工具
Aaron McMillin

6

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

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

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

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

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

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.