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

时间:2014-03-09 16:44:29

标签: bash awk

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

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

ps aux | ggrep -Pi 'CPU|foo' 

CPU是一个值,我知道它将在输入的第一行,因为它是列标题之一,foo是我实际搜索的特定模式。

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

awk 'NR > 1 { exit }; 1'

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

有什么建议吗?

3 个答案:

答案 0 :(得分:11)

使用以下awk脚本:

ps aux | awk 'NR == 1 || /PATTERN/'

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

顺便说一句,使用sed

可以获得相同的结果
ps aux | sed -n '1p;/PATTERN/p'

答案 1 :(得分:2)

解释awk BEGIN

  

我以为我可以把它放在BEGIN部分......

awk中,您可以拥有多个BEGIN子句。在 awk开始从stdin开始读取之前,按顺序执行

答案 2 :(得分:0)

如果您想在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