加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

awk“if”声明

发布时间:2020-12-14 01:18:14 所属栏目:Linux 来源:网络整理
导读:我有一个文件 foo--bar 我只想要分隔符上方的行.我已经在这方面挣扎了太长时间,并尝试了许多变种.我的一个班轮是: echo -e "foon-- nbar" | gawk -v x=0 -- '/^-- / { x++ } ; IF (x==0) {print} ' 这应该只打
我有一个文件

foo
--
bar

我只想要分隔符上方的行.我已经在这方面挣扎了太长时间,并尝试了许多变种.我的一个班轮是:

echo -e "foon-- nbar" | gawk -v x=0 -- '/^-- / { x++ } ; IF (x==0) {print} '

这应该只打印“foo”但我得到整个文件输出.如果我改为打印x我得到

0
1
1

我似乎无法使awk根据x的值有条件地打印一行.我知道我错过了一些简单的事情.

解决方法

试着这样做:

echo -e "foon-- nbar" | awk '/^--/{exit}1'

说明

> / ^ – /是一个正则表达式,匹配当前行开头的字符串
如果条件为真,则执行> {}部分(前一个正则表达式)
> 1与{print}类似:默认情况下,如果条件为真,则在STDOUT上打印awk.虽然1对于awk是正确的,但它会打印当前行.

分解命令:

echo -e "foon-- nbar" | awk '
    {
        if (/^--/) {
            exit
        }
        else {
            print
        }
    }
'

替代分解:

echo -e "foon-- nbar" |
awk '(/^--/) { exit }
             { print }'

这强调有两种模式行为规则;一个具有显式模式和退出动作;另一个是隐式模式和打印动作.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读