Eu tenho arquivo de texto. Tarefa - obtém a primeira e a última linha do arquivo após
$ cat file | grep -E "1|2|3|4" | commandtoprint
$ cat file
1
2
3
4
5
Precisa disso sem saída de gato (apenas 1 e 5).
~$ cat file | tee >(head -n 1) >(wc -l)
1
2
3
4
5
5
1
Talvez exista uma solução awk e mais curta ...
wc -l
nada tem a ver com a saída da última linha de um arquivo.Respostas:
Solução sed :
Ao ler
stdin
if, seria assim (por exemplops -ef
):Solução de cabeça e cauda :
Quando os dados são provenientes de um comando (
ps -ef
):Solução awk :
E também o exemplo canalizado com
ps -ef
:fonte
(head -n1 file;tail -n1 file)
tenho comando e pipe muito grandes como último símbolo. Tão| sed '1p;$!d'
mais curto.head && tail
realmente funciona para você?seq 10 | (head -n1 && tail -n1)
imprime1
apenas.-e 1b
- na primeira linha, ramifique até o final do script sed, quando a "impressão" implícita acontece. Se a entrada tiver apenas uma linha, sed termina. Caso contrário, para todas as linhas, exceto a última, exclua. Na última linha, a "impressão" implícita acontece novamente.sed
4.2.2. Felicidades.sed -n '1p;$p' file.txt
imprimirá a primeira e a última linha do arquivo.txt.fonte
sed -e 1b -e '$!d'
se não quiser isso.Uma maneira engraçada de Bash≥4:
Depois disso, você terá uma matriz
ary
com o primeiro campo (ou seja, com índice0
) sendo a primeira linha defile
e seu último campo sendo a última linha defile
. O retorno de chamadacb
(opcional, se você quiser eliminar todas as linhas da matriz) desativa todas as linhas intermediárias para não sobrecarregar a memória. Como subproduto gratuito, você também terá o número de linhas no arquivo (como o último índice da matriz + 1).Demo:
fonte
Com
sed
você, você poded
eliminar linhas se NÃO for o1
primeiro e NÃO o último$
.Use
!
paraNOT
(negar) uma condição e aX{Y..}
construção para combinar as condiçõesX
ANDY
:ou você pode usar um intervalo - de
2
nd a la$
t - e excluir todas as linhas desse intervalo, exceto a$
linha la t:fonte
Usando Perl:
O item acima imprime o primeiro item na saída de
seq 10
via theif 1..1
, enquanto oor eof
também imprime o último item.fonte
/etc
abrt
eyum.repos.d
tem que fazer esta pergunta?Sem gato:
ou
fonte
fonte