Tem um programa complicado e complexo que é usado para pré-processamento de texto, a fim de enviá-lo para um software de Machine Learning.
Para resumir a história:
O script bash entra em uma pasta onde milhares de arquivos de texto estão aguardando, abrindo-os com CAT, limpando e excluindo linhas supérfluas e, em seguida, antes de enviar arquivos para o processo de Aprendizado Automático, grava um CSV em disco com algumas informações para humanos posteriores verificação.
É muito importante manter o número da linha além do conteúdo, porque a ordem de aparição de palavras é a chave para o processo ML.
Portanto, a abordagem mi é adicionar o número da linha a cada linha dessa maneira (um liner com muitos comandos canalizados):
for every file in *.txt
do
cat -v $file | nl -nrz -w4 -s$'\t' | .......
Então eu me livrei de linhas indesejadas desta forma (amostra):
...... | sed '/^$/d'| grep -vEi 'unsettling|aforementioned|ruled'
e, finalmente, manter duas linhas para processamento posterior desta maneira:
........ | grep -A 1 -Ei 'university|institute|trust|college'
A saída é algo assim (amostrando dois arquivos):
file 1.txt
0098 university of Goteborg is downtown and is one of the
0099 most beautiful building you can visit
0123 the institute of Oslo for advanced investigation
0124 is near the central station and keeps
0234 most important college of Munich
0235 and the most acclaimed teachers are
file 2.txt
0023 there is no trust or confidence
0024 in the counselor to accomplish the new
0182 usually the college is visited
0183 every term for the president but
[EDITADO]
Perdeu este passo que estava na linha errada. Desculpe.
Em seguida, o texto é empilhado em "parágrafos" desta maneira:
tr '\n\r' ' '| grep -Eio '.{0,0}university.{0,25}|.{0,0}college.{0,25}'
[END EDIT]
Esta saída é salva como variável "CLEANED_TXT" e canalizada para um WHILE, desta forma:
while read everyline; do
if [[ -n "${everyline// }" ]];then
echo "$file;$linenumber;$everyline" >> output.csv
fi
done <<< "$CLEANED_TXT"
done # for every text file
SAÍDA DESEJADA FINAL
file 1.txt;0098;university of Goteborg
file 1.txt;0123;the institute of Oslo
file 1.txt;0234;college of Munich
Meu problema é o número da linha é perdido nesta última etapa devido ao GREP antes do loop.
Leve em conta que eu preciso do número da linha original. Renumerar dentro do loop não é permitido.
Estou preso. Qualquer ajuda seria muito apreciada.
Atenciosamente