1) Com sed
Supondo que step e weight ocorram em linhas consecutivas,
$ sed -nE '/step/{N;s/.*step\s+(\S+).*\n.*weight\s+(\S+).*/\t/p}' ip.txt
0 1.00000000000000e-01
100 1.00000000000000e-01
-
-nEnão imprime linhas por padrão e usa regex estendido -
/step/corresponde se as linhas contiveremstep -
Npara obter a próxima linha
Nota:
O acima foi testado em GNU sed 4.2.2 . O abaixo pode ajudar no OS X e outras versões. Veja este Q & A sobre SO para detalhes, ponto principal sendo \s pode não funcionar da mesma forma que o GNU sed
sed -nE '/step/{N;s/.*step[[:space:]]+([^[:space:]]+).*\n.*weight[[:space:]]+([^[:space:]]+).*/\t/p}' ip.txt
2) Com awk
$ awk 'a ~ /step/ && /weight/{print v"\t"$2} {a=$0; v=$2}' ip.txt
0 1.00000000000000e-01
100 1.00000000000000e-01
-
{a=$0; v=$2}salva a linha e o segundo campo -
a ~ /step/ && /weight/corresponde se a linha anterior contémstepe a linha atual contémweight
Supondo que os blocos hill sejam todos semelhantes à entrada fornecida, podemos combinar três linhas consecutivas para restringir a correspondência apenas a hill blocks
awk 'b ~ /hill/ && a ~ /step/ && /weight/{print v"\t"$2} {b=a; a=$0; v=$2}' ip.txt
Para salvar os resultados, adicione > output_filename ao fim do comando
Referência: