Em clusters baseados em filas, a Fila de trabalhos pendentes é mostrada em um comando, digamos showqueue
.
O comando retorna, em colunas, uma lista de dados razoáveis, como nomes, etc., mas as colunas / dados não são realmente importantes para a pergunta.
Eu gosto de usar o utilitário watch
como watch showqueue
às vezes (com um apelido de alias watch="watch "
forçar o alias de expansão do meu comando para assistir). Existem dados valiosos (Trabalhos em execução), nas primeiras linhas, trabalhos pendentes, etc., e alguns resumos valiosos no final.
No entanto, às vezes a saída do showqueue sai da tela (inacreditável, eu sei)! Idealmente, gostaria de poder ver o início e o fim do arquivo ao mesmo tempo.
O melhor que tenho até agora é:, showqueue > file; head -n 20 file > file2; echo "..." >> file2 ; tail -n 20 file >> file2; cat file2
e usando watch
um alias disso.
Alguém sabe de algo um pouco mais flexível ou de utilidade única? Minha solução fica um pouco mais desagradável com os loops do bash para tornar a quebra "..." multilineada, não é adaptável ao redimensionamento da janela do terminal, e tenho certeza de que perdi mais.
Alguma sugestão?
fonte
seq 30 | (head && tail)
por exemplo).Respostas:
Você está procurando fazer algo como o seguinte? Mostra a saída da cabeça e da cauda.
fonte
head
podem ler mais de 10 linhas e não deixam nada paratail
ler. O utilitário não deve fazer isso e acredito que as ferramentas GNU se comportam bem a esse respeito. Usehead; echo '...'; tail
para colocar os pontos lá também.head
não ler demais? (mesmo no Mac, parece-lido por blocos)head
implementação que eu sei que lê um byte de cada vez para evitar a leitura da décima nova linha é o built-in do ksh93head
.Usando a mesma abordagem que você, usando um arquivo temporário, mas fazendo um pouco mais curto:
Isso não sofrem dos mesmos problemas como discutido em outra resposta , mas seria , possivelmente, mostrar as mesmas linhas duas vezes se a saída foi menor do que 40 linhas.
fonte
tee
para deixar a saída entrar diretamentehead
e usar apenas a saída salva paratail
.solução awk para um número arbitrário de linhas mostradas da cabeça e da cauda (altere
n=3
para definir a quantidade):Como está escrito, as partes da cabeça e da cauda não se sobrepõem, mesmo que a entrada seja menor que as
2*n
linhas.Em algumas implementações do awk, o uso
for (x in a) print a[x];
daEND
parte também funciona. Mas, em geral, não é garantido o retorno das entradas da matriz na ordem correta, e isso não ocorre, por exemplo, mawk.fonte
m
é o número de linhas no arquivo em < 2n
, isso imprimirá2n - m
linhas vazias. Também dê uma olhada aqui ;-).for (x in a)
irá iterar em ordem somente no GNU awk ; se você acha que também funcionamawk
, teste com> 10 valores.x in a
não estava certo. Corrigido agora, obrigado. Há também uma outra resposta estranha na pergunta à qual Stéphane vinculou. Eu gosto do truque do módulo!Você pode usar um script awk simples. Adicionado buffer de círculo, n = 3 nas últimas 3 linhas
Depois de atualizar, não é mais simples,
fonte
NR==1
paraNR <= 10
(ou algo assim) e, em seguida, coletar linhas em um buffer (circular?) Que você produzirá posteriormente noEND
bloco.