Tentando capturar o resultado de comandos canalizados

Tentando capturar o resultado de comandos canalizados

Eu tenho uma pasta de arquivos chamada list20140801.txt list20140802.txt ....

Estou tentando fazer isso

ls | sort | tail -3 | cat

Mas está apenas me dando os nomes dos arquivos, não os cat'ing.

Responder1

De acordo com o catmanual, a função do gato é:

Concatene FILE(s), ou entrada padrão, para saída padrão.

Não há razão para cattratar sua entrada padrão como nomes de arquivos. O que você precisa é

é | classificar | cauda -3 | gato xargs

em vez de.

Verifique xargsa página de manual para obter mais informações:http://linux.about.com/library/cmd/blcmdl1_xargs.htm

Responder2

A saída de lsjá está classificada por padrão da mesma maneira que sorta classificação padrão, portanto sortnão é necessária.

A maneira mais comum de passar uma lista gerada de arquivos para um comando é usar xargs. Consulte a xargspágina de manual para obter detalhes, mas neste caso você não precisa de nenhuma opção. ( xargspode não fazer o que você deseja se tiver um grande número de arquivos, mas na maioria dos casos comuns funciona bem sem que você precise pensar nisso.)

A versão tailusada em muitos sistemas Linux hoje em dia não aceita apenas -3como opção. Requer que você use -n3.

Por fim, o catfinal do pipeline não está fazendo nada de útil, portanto também pode ser omitido.

Este comando deve fazer o que você deseja.

ls | xargs tail -n3

Atualizar

Acabei de ler a resposta do @AtomicHeartFather e percebi que posso ter colocado taila parte errada do problema. Nesse caso, o comando seria

ls | tail -n3 | xargs cat

que é basicamente o que AtomicHeartFather escreveu, exceto pelo arquivo sort.

informação relacionada