Você está adotando uma abordagem muito complicada. Não há necessidade de um script de shell, isso é um awk
one-liner:
awk '{if(gsub(/#+/,"")){name=$0;}else{print > name".txt"}}' file
O gsub
é "substituição global". Portanto, o acima significa "se uma linha tiver qualquer #
, remova-os (substitua por nada) e defina a variável" name "para o conteúdo da linha". Como a linha agora será tudo que sobrou depois de remover o #
, name
será o padrão. Em seguida, se a linha não corresponder a #
(se a substituição falhar), imprima a linha em um arquivo cujo nome é o valor atual de name
e .txt
.
Se você ainda precisar do script de wrapper, use:
#!/bin/bash -
#This script will take 1 parameter as input: the target file path
targetFile="$1"
targetDir=$(dirname -- "$targetFile")
targetFile=$(basename -- "$targetFile")
cd -P -- "$targetDir" || exit
awk '{if(gsub(/#+/,"")){name=$0;}else{print > name".txt"}}' < "$targetFile"