각 줄을 여러 번 반복 정해진 횟수만큼

파일의 각 줄을 정해진 횟수만큼 반복하고 싶습니다.

예를 들어 각 줄을 네 번 반복하십시오.

a
b
c

된다 :

a
a
a
a
b
b
b
b
c
c
c
c

나는 약간의 검색을했고, 역행의 선을 따라 많은 질문과 답변이 있습니다.

C에서는이 작업을 수행하는 것이 쉽지만 기본 명령에 대해 더 많이 알고 있기 때문에 항상 이러한 종류의 일회용 던지기에 의존하지 않아도됩니다.



답변

  • 펄 :

    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

답변

이것이 골프 경기 로 바뀌고 있는지 궁금합니다 .

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

설명:

sed의 p명령은 현재 행을 인쇄하는 것입니다. 기본 동작은 다음 줄로 이동하기 직전에 현재 줄을 인쇄하는 것입니다.-n 에서 끌 수 있도록해야합니다). 일부 오래된 sed에는 세미콜론이 없으므로 (제 생각에) 할 수 있습니다.sed -e p -e p -e p

Awk는 condition {action} 쌍으로 . 조치가 생략 된 경우 조건이 true를 리턴하면 기본값은 현재 행을 인쇄하는 것입니다. 많은 C와 같은 언어와 마찬가지로 Awk는 1사실로 취급 됩니다. 완전성을 위해 조건이 생략되면 각 레코드에 대해 조치가 실행됩니다.

많은 perl 함수는 “default”변수를 이용합니다. 이 하나의 라이너는 (perl 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 $_;
}

답변

sed -n '{p;p;p;p;}' file

awk '{print;print;print;print;}' file

답변

당신은 필요없이이 작업을 수행 할 수 있습니다 sed, perl또는 awk.

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

또는 while 루프를 사용하십시오.

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

for 루프

$ 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 루프

$ while read i; do seq 1 2| xargs -i -- echo $i;done < sample.txt
a
a
b
b
c
c

답변

순전히 쉘 사용 :

repeats=4
while read line; do yes $line|head --lines=$repeats; done < infile > outfile

답변

이것은 당신을 위해 일할 수 있습니다 (GNU sed) :

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

각 줄을 4 번 반복합니다.

또는 원하는 경우 :

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

각 줄을 3 번 더 반복합니다.


답변

@potong의 답변은 빈 줄과 함께 작동하지 않으므로 다음 \+과 같이 *바꿔야합니다.

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