awk:在读取行之前打印第一行文件

Chr*_*itz 2 bash awk

在我开始使用awk逐步遍历每一行之前,我将如何打印给定输入的第一行?

假设我想运行命令ps aux并返回列标题和我正在搜索的特定模式.过去我做过这个:

ps aux | ggrep -Pi 'CPU|foo' 
Run Code Online (Sandbox Code Playgroud)

哪里CPU是我知道会在输入的第一行,因为它是一个列标题和值foo是特定的模式实际上,我寻找.

我找到了一个将拉出第一行的awk模式:

awk 'NR > 1 { exit }; 1'
Run Code Online (Sandbox Code Playgroud)

这是有道理的,但在我对其余输入进行模式匹配之前,我似乎无法弄清楚如何解决这个问题.我以为我可以把它放在BEGINawk命令的部分,但这似乎不起作用.

有什么建议?

hek*_*mgl 12

使用以下awk脚本:

ps aux | awk 'NR == 1 || /PATTERN/'
Run Code Online (Sandbox Code Playgroud)

如果它是输出中的第一行或者它包含模式,它会打印当前行.

顺便说一句,使用sed以下方法可以获得相同的结果:

ps aux | sed -n '1p;/PATTERN/p'
Run Code Online (Sandbox Code Playgroud)

  • 简单解决方案 我想你可以放弃两个`.*` - 他们只是添加杂乱 (3认同)

Dav*_*ave 7

如果您想读取操作中的第一行BEGIN,您可以使用 读取它getline,对其进行处理,然后丢弃该行,然后再继续执行 awk 命令的其余部分。这是“介入”,但如果您首先解析标头或其他内容,这可能会有所帮助。

#input.txt
Name    City
Megan   Detroit
Jackson Phoenix
Pablo   Charlotte

awk 'BEGIN { getline; col1=$1; col2=$2; } { print col1, $1; print col2, $2 }' input.txt

# output
Name Megan
City Detroit
Name Jackson
City Phoenix
Name Pablo
City Charlotte
Run Code Online (Sandbox Code Playgroud)