Как получить первые N и последние M строки из входных данных в fish?

У меня есть ввод вроде:

1
2
3
4
5
6
7
8

И я хотел бы получить только N первых и M последних строк из этого ввода.

Например, если N равно 2, а M равно 4 Я хочу, чтобы результат был:

1
2
5
6
7
8

Строки могут перекрываться, поэтому, если N равно 6, а M равно 4, я хочу, чтобы результат был равен моему вводу.

Я пробовал использовать awk, но безуспешно:

cat input | awk "{if (NR<2 || NR>count - 4) {print}}"
1
задан 2 May 2017 в 18:48
2 ответа

Вот один прием:

$ 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

Если N + M> num_lines , тогда вы получите повторяющиеся строки с этим подходом.

Или , используйте массив рыбы индексирование:

$ set lines (cat input)
$ printf "%s\n" $lines[1..$N] $lines[(math (count $lines) - $M + 1)..-1]
1
2
7
8
9
10
1
ответ дан 3 December 2019 в 18:30

Вот так:

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

Поскольку awk не может знать количество строк в файле до того, как достигнет конца файла, вам нужно ввести количество строк в качестве переменной для awk.

2
ответ дан 3 December 2019 в 18:30

Теги

Похожие вопросы