Um onkiner para o primeiro caso:
awk '/^test1/{file++; on=1} on{print >("newfile" file ".txt")} /^test2/{on=0}' file.txt
que diz:
- Se
test1
for encontrado, incrementar o número do arquivo e a saída inicial (ou seja, transformaron
) - Se ativado, imprima a linha no nome do arquivo "newfileFILE.txt", em que FILE é o número do arquivo.
- Se
test2
for encontrado, a saída final (ou seja, desligue)
Em seguida, você pode converter os dois arquivos para newfile.txt
com o shell oneliner:
for file in newfile?.txt; do tr -d '\n' <$file; echo; done > newfile.txt
que diz "foreach file", remove todos os feeds de linha.