일치하지 않는 열을 기준으로 숫자 기호(+ 또는 -) 변경

일치하지 않는 열을 기준으로 숫자 기호(+ 또는 -) 변경

아마도 매우 간단해야 할 awk 스크립트에 몇 가지 문제가 있습니다.

내 파일은 다음과 같습니다. 수천 개의 행, 열 2와 3은 G, C, T 및 A와 4,5,6 숫자로 구성됩니다(열 4에만 음수 값이 있음).

ID A1 A2  BETA  SE     P
1  A  T   0.01  0.001  0.2
2  G  G   0.02  0.003  0.4
3  C  T  -0.02  0.005  0.1
4  T  T  -0.01  0.006  0.2

내 목표는 열 2와 열 3이 일치하지 않는 경우 열 4의 숫자 부호를 변경하는 것입니다(양수에서 음수로 또는 그 반대로). 따라서 결과는 다음과 같아야 합니다.

ID A1 A2  BETA  SE     P
1  A  T  -0.01  0.001  0.2
2  G  G   0.02  0.003  0.4
3  C  T   0.02  0.005  0.1
4  T  T  -0.01  0.006  0.2

나는 이것을 시도하기 위해 awk를 사용해 보았습니다.

awk '{if($2 != $3 print $0}'

+나는 이것이 시작하기에 간단한 질문이 아니라는 것을 알고 있지만 두 가지를 동시에 변경 하거나 -그 반대로 변경하는 방법을 모릅니다 .

해결책이 있고, 그것이 어떻게 더 잘 작동할 수 있는지에 대한 단계가 있다면 좋을 것입니다!

답변1

사용 awk:

awk 'NR!=1&&$2!=$3{$4=$4*-1};1' file
  • 조건이 참이고 첫 번째 행( ) 이 $2!=$3아닌 경우 ,NR!=1$4-1

고정 열을 다시 사용하려면 다음을 수행하세요 column.

awk 'NR!=1&&$2!=$3{$4=$4*-1};1' file | column -t
  • -t플래그는 column자체적으로 열 수를 결정하고 테이블을 생성합니다.

산출:

ID  A1  A2  BETA   SE     P
1   A   T   -0.01  0.001  0.2
2   G   G   0.02   0.003  0.4
3   C   T   0.02   0.005  0.1
4   T   T   -0.01  0.006  0.2

관련 정보