Повторите каждую строку многократно

Иначе должен сделать function для ssh:

   function ssh(){ /usr/bin/ssh $@ ; exit ; } 

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

Обратите внимание на то, что Вы должны сделать такую функцию во всех своих серверах, иначе этот взлом не будет работать. Btw можно всегда помещать функцию в ~/.bashrc или ~/.whatever_shell_you_use_rc.

Это смотрит немного грязный взлом по сравнению с путем uther.

17
06.07.2013, 02:46
7 ответов
  • Perl:

    perl -ne 'for$i(0..3){print}' file
    

    и я должен добавить, что этот отправил как комментарий @derobert, потому что это просто прохладно:

    perl -ne 'print "$_" x4'
    
  • awk и варианты:

    awk '{for(i=0;i<4;i++)print}' file
    
  • bash

    while read line; do for i in {1..4}; do echo "$line"; done; done < file
    
19
27.01.2020, 19:46
  • 1
    awk for не нуждается в фигурных скобках, если существует только одна команда для повторения. И perl более просто, если Вы используете foreach цикл: for$i(0..3){print}. –  manatwork 05.07.2013, 19:38
  • 2
    : perl -ne 'print(($_)x4)'. Кроме того, необходимо заключить в кавычки $line (в эхе) в Вашей версии удара. –  derobert 05.07.2013, 19:46
  • 3
    В моем случае, мне были нужны окончания строки Windows. как замечено здесь может достигнуть с BEGIN { ORS="\r\n" } –  The Red Pea 27.10.2015, 19:16

Интересно, превращается ли это в соответствие гольфа:

sed 'p;p;p' 
awk '1;1;1;1' 
perl -lpE 'say;say;say'   # if Paul McCartney and Michael Jackson were hackers...

Объяснение:

sed's p команда должна распечатать текущую строку. Поведение по умолчанию состоит в том, чтобы распечатать текущую строку прежде, чем переместиться в следующую строку (вот почему sed, имеет -n позволить Вам выключать его). Некоторые более старые семена не имеют точки с запятой (я думаю), таким образом, возможно, что Вам, возможно, придется сделать sed -e p -e p -e p

Awk работает с condition {action} пары. Если действие опущено, значение по умолчанию должно распечатать текущую строку, если условие возвращает true. Awk, как многие подобные языкам C, обработки 1 как верный. (Для полноты, если условие опущено, действие будет выполняться для каждой записи.)

Много функций жемчуга используют в своих интересах переменную "по умолчанию". Эта острота эквивалентна (на жемчуге 5.16):

$ perl -MO=Deparse -lpE 'say;say;say'
BEGIN { $/ = "\n"; $\ = "\n"; }
use feature 'current_sub', 'evalbytes', 'fc', 'say', 'state', 'switch', 'unicode_strings', 'unicode_eval';
LINE: while (defined($_ = <ARGV>)) {
    chomp $_;
    say $_;
    say $_;
    say $_;
}
continue {
    die "-p destination: $!\n" unless print $_;
}
34
27.01.2020, 19:46
  • 1
    +1, если это, Вы побеждаете :) Что точно делает 1 в awk? Сокращение от print $0? А-ч –  terdon♦ 05.07.2013, 19:15
  • 2
    Awk составлены из условия и блока, любой является дополнительным, но нужно присутствовать. Условие по умолчанию 1 (верный); блок по умолчанию эквивалентен {print}. Так оператор 1 означал бы печатать текущий буфер строки ({print}). ({print} и {print $0} главным образом то же, что и требовалось доказать.) –  Arcege 05.07.2013, 20:49
  • 3
    я никогда не слышал о a sed это не поддерживает точки с запятой как разделители команды; есть ли действительно такая вещь? –  Wildcard 06.05.2016, 19:41
sed -n '{p;p;p;p;}' file

awk '{print;print;print;print;}' file
4
27.01.2020, 19:46

Используя просто окружите:

repeats=4
while read line; do yes $line|head --lines=$repeats; done < infile > outfile
1
27.01.2020, 19:46
  • 1
    Делает кто-то знает, как заставить да рассмотреть --help как строка вместо опции? [рассмотрите случай где line --help или другая опция] –  user176581 06.07.2013, 18:41
  • 2
    да, yes -- --help –  don_crissti 13.09.2015, 03:01

Это могло бы работать на Вас (GNU sed):

sed 'h;:a;s/[^\n]\+/&/4;t;G;ba' file

Повторит каждую строку 4 раза.

Или если Вы предпочитаете:

sed 'h;:a;s/\n/&/3;t;G;ba' file

Где Вы повторяете каждую строку еще 3 раза.

1
27.01.2020, 19:46

Можно сделать это без требования sed, perl, или awk.

$ for i in `cat <file>` ; do seq <#> <#> | xargs -i -- echo $i ; done

или использование некоторое время цикл:

$ while read i ; do seq <#> <#> | xargs -i -- echo $i ; done < <file>

Примеры

для цикла
$ for i in `cat sample.txt` ; do seq 1 3 | xargs -i -- echo $i ; done
a
a
a
b
b
b
c
c
c
цикл с условием продолжения
$ while read i; do seq 1 2| xargs -i -- echo $i;done < sample.txt
a
a
b
b
c
c
4
27.01.2020, 19:46
  • 1
    я думаю для версии цикла, повредится на любых строках, содержащих пробел, таким образом, цикл с условием продолжения должен будет быть предпочтен. Иначе, +1, так как я - любитель решений для оболочки. –  evilsoup 06.07.2013, 16:27
  • 2
    @evilsoup - да кто-то еще упомянул это также на некотором коде, я отправил на другом Вопросы и ответы. Я думаю, что это - основное преимущество того, в то время как законченный для, цикл с условием продолжения терпим к разделителю $IFS и разделит на конце строки тогда как для разделений на $IFS. –  slm♦ 06.07.2013, 16:30

Ответ @potong не работает с пустыми строками, замена \+на *должна это исправить:

sed 'h;:a;s/[^\n]*/&/4;t;G;ba' file
1
27.01.2020, 19:46

Теги

Похожие вопросы