Если я использую cat -n text.txt
для автоматической нумерации строк, как я тогда использую команду, чтобы показать только определенные пронумерованные строки.
tail
+ head
также может сделать это, как можетawk
Если я использую cat -n text.txt
для автоматической нумерации строк, как я тогда использую команду, чтобы показать только определенные пронумерованные строки.
tail
+ head
также может сделать это, как можетawk
Ответы:
использование sed
использование
$ cat file
Line 1
Line 2
Line 3
Line 4
Line 5
Line 6
Line 7
Line 8
Line 9
Line 10
Чтобы напечатать одну строку (5)
$ sed -n 5p file
Line 5
Чтобы напечатать несколько строк (5 и 8)
$ sed -n -e 5p -e 8p file
Line 5
Line 8
Для печати определенного диапазона (5 - 8)
$ sed -n 5,8p file
Line 5
Line 6
Line 7
Line 8
Чтобы напечатать диапазон с другой определенной линией (5 - 8 и 10)
$ sed -n -e 5,8p -e 10p file
Line 5
Line 6
Line 7
Line 8
Line 10
В зависимости от целей мне нравится голова или grep
cat /var/log/syslog -n | head -n 50 | tail -n 10
вернет строки с 41 по 50.
или же
cat /var/log/syslog -n | grep " 50" -b10 -a10
будут показаны строки с 40 по 60. Проблема с методом grep заключается в том, что вы должны использовать учетную запись для заполнения номеров строк (обратите внимание на пробел)
Оба довольно удобны для анализа файлов журнала.
cat
Хотя ни один пример не нужен
cat
не может делать то, что хочет ОП
Как другие показали вам, нет необходимости использовать cat -n
. Другие программы сделают это за вас. Однако, если вам действительно нужно проанализировать вывод cat -n
и показать только определенные строки (например, 4-8, 12 и 42), вы можете сделать:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42'
4 Line 4
5 Line 5
6 Line 6
7 Line 7
8 Line 8
12 Line 12
42 Line 42
In awk
, $1
является первым полем, поэтому эта команда печатает все строки, чьи первые поля: i) от 4 до 8 (включительно) или ii) 12 или iii) 42.
Если вы также хотите удалить добавленное поле, cat -n
чтобы получить исходные строки из файла, вы можете сделать:
$ cat -n file | awk '$1>=4 && $1<=8 || $1==12 || $1==42{sub(/^\s*[0-9]+\s*/,""); print}'
Line 4
Line 5
Line 6
Line 7
Line 8
Line 12
Line 42