假设以下输入:
$ cat example
{many lines of text}
Col1 Col2 Col3
foo bar 2
bar baz 3
baz bar 8
bar foo 0
foo baz 9
baz bar 3
{many more lines of text}
以下两个awk片段解析了我之后的数据:
cat example | awk -v 'RS=\n\n' '/^Col1 /' | awk '$2 == "bar" && $3 > 1 {print $1}'
foo
baz
baz
如何将两个片段组合成一个awk位,例如
awk '
...
...
...
' example
答案 0 :(得分:6)
你可以这样做:
awk '/^Col1 /,/^$/{ if( $2 == "bar" && $3 > 1 ) print $1}' example
答案 1 :(得分:5)
这似乎有效。
gawk '/^$/{getline;if(/^Col1/){doit=1}else{doit=0;}} doit && $2=="bar" && $3>1 {print $1}' example
分成带有注释的可读块,这是:
/^$/ { # Look for a blank line
getline; # Get the next line
if (/^Col1/) { # See if your column heads exist.
doit=1 # If they do, set a boolean to true
} else {
doit=0; # Otherwise, false.
}
}
doit && $2=="bar" && $3>1 { # Check the boolean AND your conditions, then
print $1 # print.
}
答案 2 :(得分:2)
使用标记,在找到“Col1”作为第一列时设置它,并在设置后找到空行时重置它。在此之间,检查最后一根烟斗的状况:
awk '
$1 == "Col1" {
block = 1;
}
block == 1 && $2 == "bar" && $3 > 1 {
print $1;
}
block == 1 && $0 ~ /^[[:blank:]]*$/ {
exit 0;
}
' infile
输出:
foo
baz
baz