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$__'
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
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. (\d)
e uma letra antes de um .
(\w)\.
r
regex flag. map
para iterar STDIN
. sort
para ... bem, classifique. 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
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