필드에 중복된 행이 나타납니다.

필드에 중복된 행이 나타납니다.

이런 파일이 있어요

    4123    4179    3275    3317
    4137    4193    3331    3373
    4151    4207    3387    3429
                    3443    3485
                    3499    3541
                    3555    3597

$1과 $2의 각 값에 대해 $4와 $5를 반복하여 출력이 다음과 같이 표시되도록 하는 방법을 알고 싶습니다.

4123    4179    3275    3317
4123    4179    3331    3373
4123    4179    3387    3429
4123    4179    3443    3485
4123    4179    3499    3541
4123    4179    3555    3597
4137    4193    3275    3317
4137    4193    3331    3373
4137    4193    3387    3429
4137    4193    3443    3485
4137    4193    3499    3541
4137    4193    3555    3597

시간 내 주셔서 감사합니다!

답변1

awk '
    NR==FNR { a[++c,1]=$(NF-1); a[c,2]=$NF; next }
    NF>2 { for (i=1; i<=c; i++) print $1, $2, a[i,1], a[i,2] }
' file file
4123 4179 3275 3317
4123 4179 3331 3373
4123 4179 3387 3429
4123 4179 3443 3485
4123 4179 3499 3541
4123 4179 3555 3597
4137 4193 3275 3317
4137 4193 3331 3373
4137 4193 3387 3429
4137 4193 3443 3485
4137 4193 3499 3541
4137 4193 3555 3597
4151 4207 3275 3317
4151 4207 3331 3373
4151 4207 3387 3429
4151 4207 3443 3485
4151 4207 3499 3541
4151 4207 3555 3597

답변2

#! /bin/bash
# generate last two fields file 
# generate first two fields file
# get the number of lines of input

n=$(< file sed -Ene '
  s/\s+/ /g;s/^ | $//g
  s/ /\n/2
  h;s/.*\n//;w f34
  g;s/\n.*//w f12
  $=
')

while IFS= read -r l <&3; do
  yes "$l" | paste -d" " - f34 | head -n "$n" 
done 3< f12

결과

4123 4179 3275 3317
4123 4179 3331 3373
4123 4179 3387 3429
4123 4179 3443 3485
4123 4179 3499 3541
4123 4179 3555 3597
4137 4193 3275 3317
4137 4193 3331 3373
4137 4193 3387 3429
4137 4193 3443 3485
4137 4193 3499 3541
4137 4193 3555 3597
4151 4207 3275 3317
4151 4207 3331 3373
4151 4207 3387 3429
4151 4207 3443 3485
4151 4207 3499 3541
4151 4207 3555 3597

관련 정보