Como recuperar primeiro N e últimas M linhas da entrada em peixes?

1

Eu tenho uma entrada como:

1
2
3
4
5
6
7
8

E eu gostaria de recuperar apenas N primeiras e M últimas linhas desta entrada.

Por exemplo, se N é 2 e M é 4, quero que o resultado seja:

1
2
5
6
7
8

As linhas podem se sobrepor, portanto, se N for 6 e M for 4, quero que a saída seja igual à minha entrada.

Eu tentei usar o awk, sem sorte:

cat input | awk "{if (NR<2 || NR>count - 4) {print}}"
    
por Jezor 02.05.2017 / 17:48

2 respostas

1

Aqui está uma técnica:

$ seq 10 > input
$ set N 2; set M 4
$ set wanted (sed $N'q' input; tac input | sed $M'q' | tac)
$ printf "%s\n" $wanted
1
2
7
8
9
10

Se N+M > num_lines , você obterá linhas duplicadas com essa abordagem.

Ou , use os subscritos da matriz do fish:

$ set lines (cat input)
$ printf "%s\n" $lines[1..$N] $lines[(math (count $lines) - $M + 1)..-1]
1
2
7
8
9
10
    
por 10.05.2017 / 20:41
2

Assim:

awk 'NR <= 2 || lines - 4 < NR {print}' lines=(wc -l input) input

Como o awk não pode saber o número de linhas em um arquivo antes de chegar ao final do arquivo, você precisa inserir o número de linhas como uma variável no awk.

    
por 10.05.2017 / 06:25

Tags