Форум — General Поменять каждую 2-ю и 3-ю строки между собой perl, sed, строки 0 3 Добрый день!Подскажите, как в файле поменять каждую вторую и третью строки друг с другом?Дано: 1 2 3 4 5 6 Нужно: 1 3 2 4 6 5 и т.д. Ссылка
Первое, что пришло в голову: $ perl -ne 'push @x,$_;if($. % 3==0){print $x[0],$x[2],$x[1];@x=()}END{print for @x}' file.txt Наверняка можно красивее. evbogdanov (16.12.17 07:17:32 MSK) Показать ответы Ссылка
Ответ на: комментарий от evbogdanov 16.12.17 07:17:32 MSK Спасибо, работает! Но тоже уважаю максимально красивые и минималистичные решения. vovin2002 (16.12.17 07:27:15 MSK) автор топика Ссылка
for i in $(seq 1 8) ; do echo $i >> data.txt; done cat data.txt | awk '{getline two;getline three; print $0; print three; print two; three=two=""}' 1 3 2 4 6 5 7 8 anonymous (16.12.17 07:45:16 MSK) Ссылка
cat in.txt | head -n 1 >> out.txt; cat in.txt | tail -n +2 | head -n 2 | tac >> out.txt; cat in.txt | tail -n +4 >> out.txt :) vaddd ★☆ (16.12.17 14:55:16 MSK) Ссылка
Ответ на: комментарий от evbogdanov 16.12.17 07:17:32 MSK cat x.txt | perl -e 'print(@{[$a=<>,$b=<>,$c=<>]}[0,2,1]) until eof' anonymous (16.12.17 18:13:08 MSK) Показать ответ Ссылка
Ответ на: комментарий от anonymous 16.12.17 18:13:08 MSK cat x.txt | perl -e 'print((map scalar <>, 1..3)[0,2,1]) until eof' Самое читабельное наверное, из того, что попробовал. anonymous (16.12.17 18:34:37 MSK) Ссылка
А чего на sed-е то никто не может чтоли? Оно ведь просто и красиво: sed -e '1~3b;2~3{h;d};3~3G' vodz ★★★★★ (16.12.17 20:32:53 MSK) Показать ответ Ссылка
Ответ на: комментарий от vodz 16.12.17 20:32:53 MSK Спасибо. Решение на sed-е очень понравилось своей лаконичностью. vovin2002 (17.12.17 08:06:27 MSK) автор топика Показать ответ Ссылка
Ответ на: комментарий от vovin2002 17.12.17 08:06:27 MSK Решение на sed прекрасно. Жаль только, не везде работает (на Маке, например, выдаёт ошибку).Такой ещё вариант: perl -ne '$x=<>;$y=<>;print$_,$y,$x' evbogdanov (17.12.17 17:08:12 MSK) Ссылка