Como agrupar arquivos, adicionando novas linhas ausentes no final de alguns arquivos

5

Eu tenho um monte de arquivos .text, mais dos quais terminam com o padrão nl.

Um casal não tem nenhum terminador no final. O último byte físico é (geralmente) um caractere alfabético.

Eu estava usando cat *.text >| /tmp/joined.text , mas depois notei alguns lugares em joined.text onde a primeira linha de um arquivo apareceu no final da última linha de um arquivo anterior. Inspecionando o arquivo anterior, vi que não havia um terminador de linha - explicou a concatenação.

Isso levantou a questão: qual é a maneira mais fácil de concatenar, ficando no nl ausente?

Opção 1 - Uma solução que pode efetivamente adicionar uma linha em branco a alguns arquivos de entrada. Para mim, isso não é um problema, pois o processamento do joined.text pode lidar com isso.

Opção 2 - Uma solução que adiciona o cr / fl apenas a arquivos que ainda não terminaram dessa forma.

    
por HiTechHiTouch 16.02.2017 / 20:17

4 respostas

4

Outro comando que pode adicionar novas linhas, se necessário, é awk , então:

awk 1 ./*.txt
    
por 30.01.2018 / 10:51
3

Com algumas implementações de cut como o GNU cut , você pode fazer:

cut -b 1- ./*.text > output

, uma vez que irá adicionar a nova linha que falta se estiver faltando.

    
por 18.08.2017 / 16:13
3

Este prático liner Perl pode fazer o trabalho de adicionar a nova linha ausente apenas se ainda não estiver lá:

perl -lpe '' ./*.text > output
    
por 17.02.2017 / 02:10
1

A primeira abordagem que vem à mente é fazer um loop nos arquivos e apenas imprimir seu conteúdo com uma nova linha anexada:

for f in *text; do
    printf '%s\n' "$(cat < "$f")"
done > /tmp/joined.text

O $() removerá qualquer caractere de nova linha já existente, portanto, isso resultará em apenas um \n no final de cada arquivo.

    
por 16.02.2017 / 20:52