Я некоторое время назад написал программу на C, чтобы подвести итог текстового файла, выполнив одновременно и head
, и tail
, только с одиночным чтением из piped вход.Пример:
$ headtail -h 3 -t 3 < /tmp/x10
line01
line02
line03
... 4 output lines omitted ...
line08
line09
line10
Это работает, но я чувствую себя грязно из-за отсутствия изящного псевдонима sed
, который может это сделать.Найдя этот SO-ответ, который использует от sed
до печати последних N строк , теперь это кажется достижимым, но я не совсем там.
Например, отдельный head
и tail
работа:
$ sed -n -e '1,3p' < /tmp/x10
line01
line02
line03
$ sed -n -e ':a; $p; N; 4,$D; ba' < /tmp/x10
line08
line09
line10
Но моя попытка объединить два не удалась:
$ sed -n -e '1,3p; :a; $p; N; 4,$D; ba' < /tmp/x10
line01
line08
line09
line10
Было бы неплохо, если бы он работал, если H + T > N строк в файле (действует как cat
), а также для печати разделителя, указывающего, что некоторые строки были опущены из середины (число пропущенобыло бы неплохо, но я мог бы жить без него).