B
— это первое поле $1
в строке ввода. Просто начните обработку со 2-го поля:
awk 'NR==5{ for(i=2; i<=NF; i++) sum+=$i; print sum/(NF-1) }' file
Использованиеed
:
$ printf '%s\n' '/^test/+2,$p' | ed -s file
1,2
3,3
В редакторе ed
команда /^test/+2,$p
будет печатать(p
)строки, начиная с двух строк после строки, соответствующей ^test
, до конца($
).
Использованиеawk
:
$ awk '/^test/ { flag = 1; count = 1 }; (flag == 1 && count <= 0); { count-- }' file
1,2
3,3
Здесь будет напечатана строка, если flag
равно 1 и если count
меньше или равно нулю. Флаг устанавливается в 1, когда шаблон ^test
сопоставляется во входных данных, и тогда count
также устанавливается на количество строк, которые необходимо пропустить до начала вывода (, не считая текущей строки ). count
уменьшается для всех строк.
Немного другой подход сawk
:
$ awk '/^test/ { getline; while (getline > 0) print }' file
1,2
3,3
Здесь мы сопоставляем наш шаблон, а затем сразу же читаем и отбрасываем следующую строку ввода. Затем мы используем цикл while для чтения остальной части файла, печатая каждую прочитанную строку.
Точно такой же подход, но сsed
:
$ sed -n -e '/^test/ { n' -e ':again' -e 'n; p; b again' -e '}' file
1,2
3,3
Сопоставьте шаблон, затем прочитайте и отбросьте следующую строку (n
), затем войдите в цикл чтения и печати каждой строки(n; p;
). Цикл состоит из метки again
и ветвления/перехода к этой метке (b again
).
Если вы знаете, что ваши данные начинаются через 2 строки после test
и в них больше нет строк с test
, вы можете обойтись чем-то вроде этого:
awk '/^test$/ { f=1 } f && f++ > 2' filename
Кроме того, чтобы отправить эти данные в Gnuplot, вы можете сделать это через канал, подобный этому:
(
echo "set datafile separator ','"
echo "plot '-' using 1:2 with lines"
awk '/^test$/ { f=1 } f && f++ > 2' filename
echo "e"
) | gnuplot -persist
Вы можете тривиально сделать это с диапазоном start, end
с конечным условием, которое всегда ложно, и начальным условием, которое пропускает строки:
awk '/test/ && getline && getline, 0'
$ awk '/test/{n=NR} n && NR>n' file
1,2
3,3
$ awk '/test/{n=NR+1} n && NR>n' file
3,3