Очень короткая заметка про tail и head. Как известно head и tail работают с 10 первыми или последними строками соответственно. Но бывает необходимость получить все строки, кроме, например первых трех, или наоборот кроме последних 3.

Приведу пример работы, вот простой файл:

user@Ubuntu:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

Получим из него все строки, кроме первой:

user@Ubuntu:~$ tail -n+2 /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

А теперь все кроме последних двух:

bash
user@Ubuntu:~$ head -n+3 /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty

И живой пример использования, нужно получить из netstat количество соединений сгруппированных по типу, исключив первые 2 строки заголовка:

user@Ubuntu:~$ netstat -ant | tail -n +3 | awk '{print $6}' | sort | uniq -c
      1 CLOSE_WAIT
     34 ESTABLISHED
      8 LISTEN
      2 SYN_SENT

Или для удобства в цикле:

user@Ubuntu:~$ while true; do netstat -ant | tail -n +3 | awk '{print $6}' | sort | uniq -c; echo -----------; sleep 1; done
      1 CLOSE_WAIT
     32 ESTABLISHED
      8 LISTEN
-----------
      1 CLOSE_WAIT
     32 ESTABLISHED
      8 LISTEN
-----------
^C

Остановить цикл можно клавишами Ctrl+c.


Comments

comments powered by Disqus