Как извлечь 1-й, 3-й, 5-й группы из трех строк командой sed или awk?

Скажем, у меня есть файл:

Line1 Line2 Line3 Line4 Line5 Line6 Line7 Line8 Line9 Line10 Line11 Line12 … 

Я хочу получить:

 Line1 Line2 Line3 Line7 Line8 Line9 Line13 Line14 Line15 трубопровод Line1 Line2 Line3 Line7 Line8 Line9 Line13 Line14 Line15 

Это означает, что я хочу нечетное число из трех строк (в том числе).

У меня есть некоторые идеи, как for (i=1, i<=FR, i+5), {sed -n,'i, i+1p' } < input

Не могли бы вы рассказать мне структуру цикла for в sed. И как исправить это?

  • sed: проблема при замене строки с помощью шаблона
  • Переупорядочить файл, чтобы он легко читался
  • Почему эта замена регулярных выражений не работает?
  • Добавить текст после определенной строки
  • Шаблон Regex для замены нескольких значений с помощью sed
  • Сравнение двух файлов с использованием Unix и Awk
  • Простое использование суффикса адресной строки '/ M'?
  • как захватить последнюю версию ядра из grub.conf
  • 2 Solutions collect form web for “Как извлечь 1-й, 3-й, 5-й группы из трех строк командой sed или awk?”

    Попробуй это

     awk 'NR % 6 == 1 || NR % 6 == 2 || NR % 6 == 3' filename.txt > output.txt 
     seq 20| sed 'n;n;n;$!N;$!N;d' 

    n перезаписывает текущую строку с помощью строки ввода n ext и печатает пространство с образцом, которое оно перезаписывает (если вы не делаете sed -n или sed -e'#n' ) , поэтому мы делаем это три раза, затем мы буферизируем еще две добавленные строки ввода , и многое из них.

     1 2 3 7 8 9 13 14 15 19 20 

    Другое дело, что я был так:

     sed -ne:p -e'$p;N;s/\n/&/2p;tn' -ebp \ -e:n -en \ -e:d -e'N;s/\n/&/2;t' -ebd 

    Сначала буферизуют две добавленные строки ввода N ext и подсчитывают \n ewlines, добавляя и печатают, если текущая строка является последней или если буфер заполнен, а затем перезапишите эту строку ввода / вывода ext ext и еще два раза удалите буфер перед удалением это тоже.

    Это также может быть написано:

     sed -ne:p -e'$p;N;s/\n/&/2p;tn' \ -ebp -e:n -e'n;n;n' 

    Но преимущество в том, что вы можете легко параметризовать его так:

     altl(){ sed -ne":t$(n=0 nt='\n\t' b=$nt\b while [ "$#" -gt "$((!(n+=1)))" ] && c=${1%?} p=${1##*[!p]} \ l=$nt${p:+\$p;} p=$nt$p${p:+;}n do case $1 in (''|0*|*[!0-9]*?|*[!pd]) >&2 printf '"%s":\tARG ERR\n' "$1" kill -2 0;; (1?|?|$((c-=1))) ! :; esac && printf "\n:$n.0${l}N;%s$c;t$n.1%b" \ 's/\n/&/' "$b$n.0\n:$n.1" shift; printf %b "$p${1+\c}${nt}bt" done)" } 

    На самом деле было бы нелегко сделать другой: на самом деле вам просто нужно напечатать так много [Nn] в sed чтобы это произошло. Поэтому, возможно, я потратил время на то, чтобы написать выше. Но он работает:

     ( set -x seq 150 | altl p 40d pp 10d 5p ) 

     ### This is the sed script the function's shell loop writes. ### We see it because I enabled -xtrace output on stderr. :t p;n :2.0 N;s/\n/&/39;t2.1 b2.0 :2.1 n p;n p;n :5.0 N;s/\n/&/9;t5.1 b5.0 :5.1 n :6.0 $p;N;s/\n/&/4;t6.1 b6.0 :6.1 p;n bt ### This ends the sed script. ### The rest is sed's stdout. 

     1 42 43 54 55 56 57 58 59 100 101 112 113 114 115 116 117 
    Interesting Posts

    Как правильно установить микрофонный вход ALSA на изображении jesse linux

    Является ли это так называемой «Гибридной» таблицей разделов Mac и как ее смонтировать в Linux?

    Передайте 'напечатанный текст' из интерактивной оболочки bash в команду

    Как и где я могу навсегда установить файл $ program, чтобы иметь дополнительный аргумент '&'

    Динамики создают звук при включении питания. Что мне делать?

    Установка GCC в Solaris_x86

    -bash: phpize: команда не найдена на Centos 6

    Linux / FVWM / Acroread – не авторизовать

    Как просмотреть содержимое ярлыка приложения, чтобы найти, какую именно исполняемую строку он запускает?

    Как я могу запретить моей точке доступа hostapd делать заявку на маршрутизацию в Интернет?

    makehuman дает «ImportError: нет модуля с именем numpy»

    арифметическая синтаксическая ошибка в сравнении строк

    Rake – «bundle exec» – как я могу избежать `bundle exec` с моей` rake spec`

    команда find иногда приводит к тому, что файлы, не соответствующие совпадению

    iptraf показывает трафик на UDP / 443, почему?

    Linux и Unix - лучшая ОС в мире.