объединение нескольких команд awk
предполагая следующим образом:
$ 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=nn' '/^Col1 /' | awk ' == "bar" && > 1 {print }'
foo
baz
baz
как объединить два фрагмента в один бит awk, например
awk '
...
...
...
' example
3 ответов
Это, кажется, работает.
gawk '/^$/{getline;if(/^Col1/){doit=1}else{doit=0;}} doit && =="bar" && >1 {print }' 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 && =="bar" && >1 { # Check the boolean AND your conditions, then
print # print.
}
используйте флаг, установите его, когда нашли "Col1" в качестве первого столбца и сбросьте его, когда нашли пустую строку после ее установки. Между этим проверьте состояние вашей последней трубы:
awk '
== "Col1" {
block = 1;
}
block == 1 && == "bar" && > 1 {
print ;
}
block == 1 && ~ /^[[:blank:]]*$/ {
exit 0;
}
' infile
выход:
foo
baz
baz