首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于检索第一行和最后一行的Linux awk命令

用于检索第一行和最后一行的Linux awk命令
EN

Stack Overflow用户
提问于 2019-06-21 17:03:47
回答 3查看 565关注 0票数 0

我正在尝试检索awk命令的第一行和最后一行,但我无法检索。在那里我会犯错。

代码语言:javascript
运行
复制
egrep 'updateAll|update-mgr|Startup REX|configd.*UnitProperty updated' $LOG | \
  awk 'NR == 1{print $1" "$2" "$3} NR == $#{print $1" "$2" "$3}'

awk: cmd. line:2: NR == 1{print $1" "$2" "$3} NR == $#{print $1" "$2" "$3}
awk: cmd. line:2:                                    ^ syntax error

我期望第一行和最后一行形成grep命令的输出。

EN

回答 3

Stack Overflow用户

发布于 2019-06-21 17:19:07

顺便说一句,大多数情况下,当您在一个命令中使用grep & awk时,您做错了;)

代码语言:javascript
运行
复制
awk '
{  
    if ($0~/updateAll|update-mgr|Startup REX|configd.*UnitProperty updated/) {
       c++
       l=$0
       if(c==1){print}       
    }
}
END{print l}
'  $LOG
票数 1
EN

Stack Overflow用户

发布于 2019-06-21 18:47:16

使用NR == 1获取第一行,使用END获取最后一行。

有这样的投入:

代码语言:javascript
运行
复制
$ echo -e '1 a v\n2 b w\n3 c x\n4 d y\n5 e z'
1 a v
2 b w
3 c x
4 d y
5 e z

我们可以使用以下awk命令解析它:

代码语言:javascript
运行
复制
$ echo -e '1 a v\n2 b w\n3 c x\n4 d y\n5 e z' | awk 'NR == 1 { print $2; } END { print $2; }'
a
e
票数 0
EN

Stack Overflow用户

发布于 2019-06-21 21:22:40

@tink解决方案是正确的。我只想补充一点:。

使用变量l是不好的做法,因为根据当前的字体,它可能被误认为是1I

可以将默认匹配模式提取为用于记录处理的筛选模式。

因此@tink解决方案变成:

代码语言:javascript
运行
复制
awk '
/updateAll|update-mgr|Startup REX|configd.*UnitProperty updated/ {  
    c++;
    lastLine = $0;
    if(c == 1){print}       
}
END{print lastLine}
'  $LOG
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56707737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档