UNIX: Используя sed, как печатать каждые 1-ю и 2-ю строки в наборах по 4 строки?

331
kabita regmi

Мой файл имеет несколько наборов строк. Каждый набор имеет 4 строки. Строка 1-4 установлена ​​1. Строка 5-8 установлена ​​2 и так далее. Мне нужно напечатать первые две строки из каждого набора, то есть строки 1 и 2, строки 5 и 6 и так далее.

Содержание файла:

line 1 line 2 line 3 line 4 line 5 line 6 line 7 line 8 .. line n 
0

2 ответа на вопрос

2
Kamil Maciorowski
sed -n '1~4p;2~4p' 

1~4p соответствует каждой 4-й строке, начиная с 1-й:

line 1 line 5 line 9 … 

2~4p соответствует каждой 4-й строке, начиная со 2-й:

line 2 line 6 line 10 … 

При совместном использовании они делают то, что вы хотите.

Спасибо за новую информацию: раньше я не встречал `m ~ n`, главным образом потому, что этого нет в другом [отличном учебнике] (http://www.grymoire.com/unix/sed.html). AFH 6 лет назад 0
Спасибо за твой ответ. Именно то, что мне было нужно. Мой терминал Mac Bash не распознал ~. Он отлично работал на git bash на windows. После этого я смог понять, почему Mac Bash не работает. kabita regmi 6 лет назад 0
@kabitaregmi Попробуйте принять мой ответ, чтобы указать, что проблема решена. Пожалуйста, смотрите наш [тур] для деталей. Kamil Maciorowski 6 лет назад 0
0
Eugen Rieck

Я не думаю, что sedэто инструмент выбора здесь - почему бы не просто скрипт?

cat /path/to/infile | while true; do read l || break ; echo "$l" ; read l || break ; echo "$l" ; read l || break ; read l || break ; done > /path/to/outfile 
Я собирался предложить аналогичный ответ, но вам нужно использовать вариант команды `read`, чтобы избежать изменений в строке:` read -rl` позволит избежать специальной обработки (например, обратной косой черты в строке), но ведущие и конечные пробелы будут потеряны. То, что вам нужно, это `read -r` без переменной, которая читает строку, включая все пробелы в` $ REPLY ", поэтому вы используете` echo "$ REPLY" `вместо` echo "$ l" `. AFH 6 лет назад 1
спасибо за ваш ответ тоже. Я знал, что цикл будет работать. Мне нужно было сделать с седом. kabita regmi 6 лет назад 0