첫 번째 열의 숫자를 기준으로 파일의 각 줄의 횟수를 인쇄하는 방법

첫 번째 열의 숫자를 기준으로 파일의 각 줄의 횟수를 인쇄하는 방법
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입력 파일을 반복합니다. 기본 개행 문자는 줄 구분 기호입니다. 입력 라인을 인쇄하지 않음
  • -ePerl 코드 실행
  • 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

관련 정보