Como organizar e cortar essa parte de um diretório em um arquivo?

1

Meu principal objetivo é copiar o conteúdo de um diretório e enviá-lo para um arquivo. Em seguida, recorte o local do diretório para ter apenas o nome. Então, para organizar seu conteúdo, mas a maioria apareceu. Isso também é lição de casa e minhas restrições são que tem que ser um comando

Isso é o que eu pensei que faria o trabalho, mas não faz

wc -l ~location/folder/folder/*.log > ~/log.info | cut -d "/" -f9 ~/log.info | sort

Meu resultado

1 /s/s/s/s/location/folder/folder/a.log
1 /s/s/s/s/location/folder/folder/b.log
1 /s/s/s/s/location/folder/folder/c.log
3 /s/s/s/s/location/folder/folder/d.log
2 /s/s/s/s/location/folder/folder/e.log

O que eu quero que seja

1 a
1 b
1 c
2 e
3 d
    
por Joe 04.02.2016 / 19:23

3 respostas

0

Você pode remover todos os bits que não deseja, passando a saída por sed :

wc -l ~location/folder/folder/*.log > ~/log.info
cut -d "/" -f9 ~/log.info | sort | sed 's_/.*/__;s_\.log$__'
    
por 04.02.2016 / 19:26
0

Que tal:

perl -e 'print sort map {s/(\d).*(\w)\..*//r} <>' 

(Precisa do perl 5.14+ - provavelmente já está instalado no seu sistema)

Usa um bit embutido de código perl que:

  • <> , que é STDIN ou arquivos especificados na linha de comando.
  • Usa uma regex de substituição que captura um dígito (\d) e uma letra antes de um . (\w)\.
  • retorna a string transformada. r regex flag.
  • usa map para iterar STDIN .
  • e sort para ... bem, classifique.
  • e print para imprimi-lo.

Saída:

1 a
1 b
1 c
2 e
3 d

Alternativamente:

perl -e '%x=map {open($f,'<',$_); @f=<$f>; $_=>''.@f} @ARGV;print "$x{$_} $_\n" for sort {$x{$a}<=>$x{$b}} keys %x;' ~location/folder/folder/*.log 
    
por 04.02.2016 / 20:31
0
wc … > ~/log.info | cut ~/log.info | …

Os dois lados do tubo são executados em paralelo. A menos que wc seja especialmente rápido para terminar e cut seja especialmente lento para iniciar, no momento em que cut ler ~/log.info , é provável que ainda esteja vazio ou até inexistente. Para agravar o problema, o redirecionamento em sort também é executado em paralelo e também trunca o arquivo.

Não entendo o que você está tentando fazer com esse arquivo temporário intermediário. Não é útil:

wc -l ~location/folder/folder/*.log | cut -d "/" -f9 | sort > ~/log.info

Seria mais simples mudar para o diretório de destino:

{ cd ~location/folder/folder && wc -l -- *.log; } | sort > ~/log.info
    
por 06.02.2016 / 01:57