** I need a shell script to copy only ... last line of them into a single file and sort them from smallest to largest.
Como seus arquivos de exemplo não possuem uma linha 11, trabalhei com base na sua "(última linha)".
- vários arquivos de texto com um padrão de nomenclatura comum.
- última linha
- classificar
- colocar em um arquivo
Para reunir as últimas linhas e classificá-las
$ tail -q -n 1 file*.txt | sort
1 40.7
2 33.7
3 54.2
e, para classificar os resultados e colocar os resultados em um arquivo
$ tail -q -n 1 file*.txt | sort > final.txt
$ cat final.txt
1 40.7
2 33.7
3 54.2
Isso pressupõe que os arquivos estão todos em um diretório.
Se os arquivos estiverem em subdiretórios em um nível, altere file*.txt
para */file*.txt
Se os arquivos estiverem em vários diretórios aninhados de várias profundidades, ou em vários locais, você deverá usar o comando find
, conforme descrito em outras respostas.
$ find . -name 'file*.txt' -exec tail -q -n 1 {} \; | sort
1 40.7
2 33.7
3 54.2
onde os nomes dos arquivos podem incluir espaços, o que costumava ser um problema.
$ ls -F *.txt
file1.txt file2.txt file three.txt final.txt