23

ПРИВЕТ,

Возможно, это что-то очень простое, но я не понимаю сейчас. В Linux shell, учитывая текстовый файл, как я могу сделать что-то вроде cat filename, чтобы я видел только первую строку, третью строку, 5, 7, 9 и так далее?

если не с кошкой, с другой командой

Спасибо

8 ответов8

38

Использование awk: awk 'NR % 2 == 0' filename

Edit: удалено {print} , как показано в ответе ghostdog74 и прокомментировано Роберто Бонваллетом.

12

Или что-то вроде

sed -n 'p;n' filename

Для объяснения посмотрите справочную страницу для sed .

7

Используйте sed:

sed -n 1~2p filename
2
awk '{if(NR%2!=0)print}' myfile
2

2 способа сделать это с помощью awk

$ awk '{getline;print}' file # the equivalent of the selected sed answer
$ awk 'NR%2==0' file

ИЛИ только с оболочкой

i=1; while read -r line; do [ $((i++ % 2)) -eq 0 ] && echo $line; done <"file"
1

Простой поиск в Google показывает эту ссылку: http://bash.cyberciti.biz/academic/write-odd-even-line-file/

Вам нужно только немного его настроить.

Мои 2 цента.

0

Невозможно проверить, нашел ссылку:cat -n $ 1 | grep "$ ODDRE" | cut -b 8-> oddfile.$$

0

Не проверял это (похоже, не работает на Mac OS X), но GNU sed поддерживает first~step в качестве выбора адреса, например:

sed -n 1~2p file

будет начинаться с первой строки и печатать все остальные строки после этого.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .