awk를 사용하여 인접한 열과 연속 행에서 숫자 빼기

awk를 사용하여 인접한 열과 연속 행에서 숫자 빼기

다음과 같이 탭으로 구분된 파일이 있습니다.

NZ_CP023599.1   WP_003911075.1  302845  305406
NZ_CP023599.1   WP_003898428.1  471171  472583
NZ_CP023599.1   WP_003402248.1  534387  535157
NZ_CP023599.1   WP_003402301.1  552556  553950
NZ_CP023599.1   WP_003402318.1  558837  559697

다음 행의 세 번째 열에 있는 숫자에서 각 행의 네 번째 열에 있는 숫자를 뺀 다음 다음 행의 차이를 다섯 번째 열에 인쇄해야 합니다.

출력은 다음과 같습니다.

NZ_CP023599.1   WP_003911075.1  302845  305406  
NZ_CP023599.1   WP_003898428.1  471171  472583  165765
NZ_CP023599.1   WP_003402248.1  534387  535157  61804
NZ_CP023599.1   WP_003402301.1  552556  553950  17399
NZ_CP023599.1   WP_003402318.1  558837  559697  4887

이 문제를 해결하기 위해 awk를 어떻게 사용할 수 있습니까?

답변1

다음과 같이 이 작업을 수행할 수 있습니다. 첫 번째 행을 제외하고 빼기를 연기하지만 마지막 열 값을 후속 행의 입력으로 가져옵니다.

awk -F'\t' 'BEGIN { OFS = FS } NR == 1 { last = $4; print;  next }{ $5 = $3 - last; last = $4  }1' file

답변2

awk -F\\t '{ if (length(prev4)>0) { col5 = FS ($3-prev4) }; print $0 col5; prev4 = $4 }' InputFile

관련 정보