일련의 변수 및 기준 열로 구성된 여러 줄을 파일에 추가합니다.

일련의 변수 및 기준 열로 구성된 여러 줄을 파일에 추가합니다.

4개의 열이 있는 파일이 있습니다. 처음 두 열은 x 및 y 위치(정수)에 대한 것이고, 세 번째와 네 번째 열은 임의 필드 값에 대한 것입니다.

1 1 0.5 1.2 
1 2 1.7 2.3
1 3 2.0 2.2 
2 1 1.4 2.5
2 2 1.6 3.0
2 3 2.35 2.9
3 1 2.0 2.9
3 2 0.7 2.5
3 3 0.2 2.1

이 입력 파일의 경우 두 번째 열과 세 번째 열 사이에 두 개의 열을 추가하고 싶습니다. 처음 두 열의 각 x,y 값에 대해 1과 3 사이의 z 값을 세 번째 열로 추가해야 합니다. 마지막으로 네 번째 열에는 다음과 같은 값을 추가해야 합니다.

if (z<$3 ) value = 0
if (z>=$3 && z <=$4) value = 1
if (z >$4) value = 2

$3과 $4는 입력 파일의 열 값이며 $4는 항상 $3보다 큽니다.

출력 파일은 다음과 같습니다.

1 1 1 1 0.5 1.2 
1 1 2 2 0.5 1.2 
1 1 3 2 0.5 1.2 
1 2 1 0 1.7 2.3
1 2 2 1 1.7 2.3
1 2 3 2 1.7 2.3    
1 3 1 0 2.0 2.2 
1 3 2 1 2.0 2.2
1 3 3 2 2.0 2.2
2 1 1 2 1.4 2.5
2 1 2 2 1.4 2.5
2 1 3 2 1.4 2.5
2 2 1 0 1.6 3.0
2 2 2 1 1.6 3.0
2 2 3 1 1.6 3.0
2 3 1 0 2.35 2.9
2 3 2 0 2.35 2.9
2 3 3 2 2.35 2.9
3 1 1 0 2.0 2.9
3 1 2 1 2.0 2.9
3 1 3 2 2.0 2.9
3 2 1 1 0.7 2.5
3 2 2 1 0.7 2.5
3 2 3 2 0.7 2.5
3 3 1 1 0.2 2.1
3 3 2 1 0.2 2.1
3 3 3 2 0.2 2.1

awk를 사용하여 이러한 출력 파일을 만드는 방법은 무엇입니까?

답변1

당신이 요구하는 것은 다음과 같습니다.

awk '{                 
  y = $2; 
  for(z=1;z<=3;z++){
     value = z < $3 ? 0 : z > $4 ? 2 : 1; 
    $2 = y OFS z OFS value; 
    print
  }
}' file

하지만 표시된 출력을 생성할 수는 없습니다.

관련 정보