Як видалити верхній і нижній рядки з файлу за допомогою sed, awk і т.д.

Я хочу подрібнити вершину 13 і останні 6 рядків з файлу

There are several answers on unix/linux but they aren't working for me as the sed options used aren't available on osx, tac isn't available, etc.
Si I am posting here for a q&a that is specific to osx

Зараз я використовую

$ cat myfile | tail -n+14 | sed '$d' | sed '$d' | sed '$d' | sed '$d' | sed '$d' | sed '$d'

але шукаю більш короткий '1 крок в кінці' шляху.

1

5 Відповіді

Просто для задоволення:

sed -e '1,13d' -e $(($(wc -l 

Проте потрібен два повні проходи над вхідним файлом.

1
додано

Спробуйте таким чином:

sed '1,13d' filename | head -n -6

Команду sed можна використовувати для видалення діапазону рядків. Тут 1 і 13 є мінімальними і максимальними номерами рядків.

1
додано

You can do it all with tail

tail -n+14 FILE | tail -r | tail -n+7 | tail -r
  • Перший хвіст видаляє перші 13 рядків
  • Другий tail змінює порядок рядків
  • Третій хвіст видаляє перші 6 рядків скасованого порядку
  • Останній хвіст знову змінює порядок рядків

або з awk (з натхненням з патрікс)

awk -v n="$(wc -l FILE)" 'NR > 13 && NR < (n-6+1)' FILE
1
додано

Ось моя спроба, не така елегантна, але працює:

cat myFile | tail -n+14 | head -n $[ $(wc -l myFile | awk '{ print $1 }') - 19 ]

Note: last 19 is 13 + 6

Краще вставити це у сценарій:

#!/bin/bash                                                                                                                                                                                                        

FILE="$1"
HEAD_STRIP="$2"
TAIL_STRIP="$3"

cat $FILE | tail -n+$[$HEAD_STRIP + 1] | head -n $[ $(wc -l $FILE | awk '{ print $1 }') - $[HEAD_STRIP + TAIL_STRIP] ]
0
додано

Це буде працювати з версією OSX tail :

cat file.txt | tail -n +7 | tail -r | tail -n +14 | tail -r    

Якщо у вас є версія gnu head (встановлена: brew install coreutils ), ви можете зробити це:

cat file.txt | tail -n +7 | head -n -13
0
додано
Крім uuoc в обох командах, ви маєте вимоги назад.
додано Автор user2977712, джерело