awk
텍스트를 100번 반복하는 방법은 무엇입니까 ?
즉
string1
string2
string3
될 것입니다:
string1
string2
string3
string1
string2
string3
string1
string2
string3...
답변1
이 질문에는 태그가 지정되어 있지만 awk
다음을 사용하지 않는 간단한 솔루션을 추가하고 싶습니다 awk
.
seq 100 | xargs -n1 -I{} echo "1 2 3"
반복하려는 데이터가 파일에 있는 경우 다음을 사용하세요.
seq 100 | xargs -n1 -I{} cat filename
yes
또 다른 해결책은 인수를 반복하는 command 를 사용하는 것입니다 .
yes "1 2 3" | head -n100
답변2
( input
반복할 텍스트가 포함된 파일)
GNU 사용 awk
(그리고 입력에 NUL 바이트가 포함되어 있지 않다고 가정):
awk -v n=100 -v RS='\0' -v ORS= '{while (n--) print}' < input
가지고 다닐 수 있는:
awk -v n=100 -v ORS= '
{all = all $0 RS}
END {while (n--) print all}' < input
(입력이 개행 문자로 끝나지 않으면 개행 문자가 추가됩니다.)
다음을 수행할 수도 있습니다.
set --
n=100; while [ "$n" -gt 0 ]; do
set -- "$@" input
n=$((n - 1))
done
cat "$@"
input
이는 포함된 바이트에 관계없이 작동합니다. 그러나 의 값이 더 크고 쉘 에 명령이 내장되어 n
있지 않으면 명령 인수 크기에 대한 시스템 제한(여기 )에 도달할 수 있습니다.cat
cat
또는 최신 버전을 사용하면 zsh
고정 텍스트에 대해 다음을 수행할 수 있습니다.bash
ksh93
yash -o braceexpand
printf '%.0sstring1\nstring2\nstring3\n' {1..100}
그리고 zsh
:
repeat 100 print -l string{1..3}
뻔뻔하게 말하면 seq
GNU가 설치된 시스템에서는 다음과 같이 할 수도 있습니다.
seq -f 'string1
string2
string%.0g' 3.0001 0.0001 3.0100
답변3
그리고 awk
:
echo "t1 t2 t3" | awk '{l=$0; for(i=1;i++<100;) l=l" "$0} END{print l}'
그리고 perl
:
echo "t1 t2 t3" | perl -ne 'chomp;print "$_ " x 100;'
답변4
에서는 /bin/bash
파일 레코드의 세 값을 n번 연속으로 인쇄할 수 있도록 인쇄 레코드를 매개변수화할 수 있습니다. 연속적일 필요는 없습니다.
입력 파일에서 레코드 2, 3, 6을 인쇄한다고 가정합니다.inputfile
$ cat inputfile
A
B
C
D
E
F
$ awk -v RS='\n' '{if(NR=="2"||NR=="3"||NR=="6") a[NR]=$0} \
END{for(i=1;i++<=100;) {print a[2]"\n"a[3]"\n"a[6];}}' inputfile
틀림없이 이는 호출되는 배열 때문에 비용이 조금 더 듭니다.