Parsing 使用awk打印一定数量的行。跳过某些行

Parsing 使用awk打印一定数量的行。跳过某些行,parsing,unix,awk,Parsing,Unix,Awk,我有一个简单的问题,在这个论坛或awk学习网站上几乎找不到 我有一些与以数字开头的行匹配的awk代码,并打印该行的第6列: /^[1-9]/ { print $6 } 我如何告诉它只打印匹配列的前50行 补充问题 我试着用我自己的答案,我得到了打印50行。但是,现在我正在尝试选择打印哪50行。为此,我跳过了一行,该行以数字开头,包含单词“residence”。然后我跳过5行以数字开头并包含“w”的代码。这个方法的工作原理就好像我只是跳过带有剩余的一行,然后从第一行开始打印一个数字。你知

我有一个简单的问题,在这个论坛或awk学习网站上几乎找不到

我有一些与以数字开头的行匹配的awk代码,并打印该行的第6列:

/^[1-9]/ {   
print $6 
}
我如何告诉它只打印匹配列的前50行

补充问题 我试着用我自己的答案,我得到了打印50行。但是,现在我正在尝试选择打印哪50行。为此,我跳过了一行,该行以数字开头,包含单词“residence”。然后我跳过5行以数字开头并包含“w”的代码。这个方法的工作原理就好像我只是跳过带有剩余的一行,然后从第一行开始打印一个数字。你知道为什么不考虑我的w吗

#!/usr/bin/awk -f

BEGIN {
    line  = 0;
    skipW = 0;
}


# Ignore all lines beginning with a number until I find one I'm interested in.
/^[0-9]+ residue/ { next }

# Ignore the first five lines beginning with a number followed by a 'w'.
/^[0-9]+ w/ { 
    skipW += 1;
    if (skipW <= 5) next
}

# For all other lines beginning with a number, perform the following.  If we are
# "printing", increment the line count.  When we've printed 50 lines turn off
# printing from that point on.
/^[0-9]+/ { 
    ++line
    if ((line > 0) && (line <= 50)) print $6
}

使用匹配计数器作为条件的一部分:

/^[1-9]/ && matched < 50 {
    print $6
    matched++
}

但是,如果producer命令不能很好地处理SIGPIPE,这可能并不总是适用于pipline。

使用匹配计数器作为条件的一部分:

/^[1-9]/ && matched < 50 {
    print $6
    matched++
}
awk '/^[1-9]/ { if (num_printed++ < 50) print $6 }'
但是,如果producer命令不能很好地处理SIGPIPE,那么这可能并不总是适用于管道

awk '/^[1-9]/ { if (num_printed++ < 50) print $6 }'
注意从增量后到增量前的切换


请注意从增量后到增量前的切换。

这只在输入的前50行中查找匹配项,而不是打印出前50行匹配项。我不必在BEGIN语句中将匹配项初始化为0?否;变量在首次使用时自动初始化为零。这仅在输入的前50行中查找匹配项,而不是打印出前50行匹配项。我不必在BEGIN语句中将匹配项初始化为0?否;变量首次使用时自动初始化为零。您的程序似乎正确。举一个数据失败的例子会很有帮助。你说“跳过以数字开头并包含单词残数的行”,但代码没有这样做;它跳过以数字开头,紧跟着单词剩余的行。你需要像/^[0-9]+.*residence/这样的东西来做你想做的事情。类似地,对于“以数字开头并包含w”的行,您能否想出一种匹配多行模式的方法。比如,如果一行中有一个模式4行,它们以一个数字开头,然后有一个字母,比如1q2r3i4,那么lYou可以对一个$0记录数组进行某种处理,并保留一个包含第一行和第四行的选项卡,看看会发生什么。烦躁、混乱,但可能还可以。你的程序似乎是正确的。举一个数据失败的例子会很有帮助。你说“跳过以数字开头并包含单词残数的行”,但代码没有这样做;它跳过以数字开头,紧跟着单词剩余的行。你需要像/^[0-9]+.*residence/这样的东西来做你想做的事情。类似地,对于“以数字开头并包含w”的行,您能否想出一种匹配多行模式的方法。比如,如果一行中有一个模式4行,它们以一个数字开头,然后有一个字母,比如1q2r3i4,那么lYou可以对一个$0记录数组进行某种处理,并保留一个包含第一行和第四行的选项卡,看看会发生什么。烦躁、凌乱,但可能还可以。