
Input_file:
1 string1
4 string2
2 string3
...
Output_file:
1 string1
4 string2
4 string2
4 string2
4 string2
2 string3
2 string3
...
이것은 내 코드이지만 작동하지 않습니다.
#!/bin/bash
N=0
cat input_file | while read LINE; do
N=$((N+1))
awk '{for(i=0;i<'$1';i++);print}' $LINE >> output_file
done
답변1
댓글에서:
awk '{for(i=0;i<$1;i++) print}' input_file > output_file
이것은 input_file
각 줄에서 ; i
첫 번째 필드를 기준으로 반복하고 현재 줄을 여러 번 인쇄합니다. 그러면 전체 출력이 로 리디렉션됩니다 output_file
.
답변2
그리고perl
$ cat ip.txt
1 string1
4 string2
2 string3
$ perl -ane 'print $_ x $F[0]' ip.txt
1 string1
4 string2
4 string2
4 string2
4 string2
2 string3
2 string3
-a
입력 줄을 공백으로 분할하고@F
배열 에 저장하는 옵션-n
입력 파일을 반복합니다. 기본 개행 문자는 줄 구분 기호입니다. 입력 라인을 인쇄하지 않음-e
Perl 코드 실행print $_ x $F[0]
$_
입력 줄의 첫 번째 필드를 지정된 횟수만큼 반복하는 명시적 인쇄$F[0]
답변3
perl -pae '$_ = $_ x $F[0]' input_file
perl -nae 'print while $F[0]--' inputfile
perl -pae 's/^.*\n\K/$`/m while --$F[0]' inputfile
while IFS= read -r l; do yes "$l" | head -n "${l%%[!0-9]*}"; done < inputfile
while IFS= read -r l; do csh -c "repeat ${l%%[!0-9]*} echo '$l'"; done < inputfile
while IFS= read -r l; do
for k in $(seq "${l%%[!0-9]*}"); do echo "$l"; done
done < inputfile