在我开始使用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)
如果您想读取操作中的第一行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)