Ось як це зробити з awk
:
awk 'NR>2 {print t} {t=$0}'
Також інший спосіб sed
:
sed '1d;x' file.txt
x
- це розширена sed
команда, вона перемикає поточний рядок з попереднім: поточний переходить у буфер, а попередній переходить на екран і так далі, sed
обробляючи потік рядок за рядком (саме тому перший рядок буде порожнім).
awk
рішення на кожному кроці (рядку) вводить поточну лінію в змінну і починає друкувати її лише після проходження другого рядка. Таким чином, ми отримали shitfed послідовність рядків на екрані від другого до останнього, але одного. Останній рядок опущений, оскільки рядок знаходиться в змінній і повинен бути надрукований лише на наступному кроці, але всі кроки вже закінчені, і ми ніколи не бачимо рядка на екрані.
Ця ж ідея в perl
:
perl -ne 'print $t if $.>2 ; $t=$_' file.txt
$.
означає номер рядка та $_
поточний рядок.
perl -n
це ярлик для while(<..>) {..}
структури та -e
призначений для вбудованого сценарію.
head -n -1
видаляє перший І останній рядок мого.txt
файлу на Ubuntu 14.04.2LTS.