Parsing 使用awk打印一定数量的行。跳过某些行
我有一个简单的问题,在这个论坛或awk学习网站上几乎找不到 我有一些与以数字开头的行匹配的awk代码,并打印该行的第6列:Parsing 使用awk打印一定数量的行。跳过某些行,parsing,unix,awk,Parsing,Unix,Awk,我有一个简单的问题,在这个论坛或awk学习网站上几乎找不到 我有一些与以数字开头的行匹配的awk代码,并打印该行的第6列: /^[1-9]/ { print $6 } 我如何告诉它只打印匹配列的前50行 补充问题 我试着用我自己的答案,我得到了打印50行。但是,现在我正在尝试选择打印哪50行。为此,我跳过了一行,该行以数字开头,包含单词“residence”。然后我跳过5行以数字开头并包含“w”的代码。这个方法的工作原理就好像我只是跳过带有剩余的一行,然后从第一行开始打印一个数字。你知
/^[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记录数组进行某种处理,并保留一个包含第一行和第四行的选项卡,看看会发生什么。烦躁、凌乱,但可能还可以。