criando um arquivo de estatísticas customizado a partir dos arquivos de um diretório atual

0

Eu tenho arquivos como estes:

$ cat A9E27.txt
person,42%
person,60%
$ cat ffn2eG6.txt
train,85%
$ cat sBHFgkv.txt  
person,85%
person,73%
chair,44%
person,57%
$ cat A8eVAmK.txt

etc etc Alguns dos meus arquivos txt estão mesmo vazios. Como posso criar um arquivo assim?

1,A9E27.txt,person,42%,person,60%
2,ffn2eG6.txt,train,85%
3,sBHFgkv.txt,person,85%,person,73%,chair,44%,person,57%
4,A8eVAmK.txt
5, etc etc 

em que 1 mostra o número do arquivo quando classifico meus nomes de arquivos em ordem alfabética, algo como ls -1 | ordenar e A9E27.txt é o nome do arquivo, e cada linha do conteúdo do arquivo vem na frente dele separada por vírgula

ATUALIZAÇÃO: A resposta do SchrodingersScat do Ubuntu IRC está quase correta no stdout:

$ for i in * ; do echo -n "$i"; cat "$i" | sed ':a;$!{N;s/\n/, /;ba;}' ; done
5Co16.txtA9E27.txtperson,42%, person,60%
ffn2eG6.txttrain,85%
Kkc4e.txtsBHFgkv.txtperson,85%, person,73%, chair,44%, person,57%

dá resposta correta, mas como posso salvar este resultado mostrado no stdout em um arquivo corretamente?

    
por Mona Jalal 28.10.2016 / 04:13

2 respostas

1

kerframil de bash IRC:

$  i=1; for f in *; do [[ -f $f ]] || continue; data=$(tr '\n' ',' < "$f"); printf '%s,%s,%s\n' "$((i++))" "$f" "${data%,}"; done > ../../in-your-file-correctly.txt

notas:

/join #bash 
    
por Mona Jalal 28.10.2016 / 04:51
1

Que tal usar perl no modo slurp?

$ perl -F'\n' -0777ne 'print join(",", ++$n, $ARGV, @F), "\n"' *.txt
1,A8eVAmK.txt
2,A9E27.txt,person,42%,person,60%
3,ffn2eG6.txt,train,85%
4,sBHFgkv.txt,person,85%,person,73%,chair,44%,person,57%

Observe que o shell *.txt glob faz com que os arquivos sejam processados na ordem de agrupamento padrão de sua localidade - que pode não ser o que você considera "alfabético" (embora deva ser o mesmo produzido por ls -1 , eu acho).

Para salvar o resultado em um arquivo, redirecione-o:

perl -F'\n' -0777ne 'print join(",", ++$n, $ARGV, @F), "\n"' *.txt > somefile
    
por steeldriver 28.10.2016 / 05:36