큰 텍스트 파일이 있는데 7열(BETA)에서 8열(SE)까지 값을 나누고 결과(11열)가 포함된 테이블 끝에 새 열을 만들고 싶습니다. 문제는 7열의 값 중 일부가 0을 초과해 음수라는 점이다.
SNP CHR BP A1 AX A1_FREQ BETA SE P OBS_CT
rs10875231 1 100000012 T G 0.405 -0.0456807 0.02260471 0.04335677 4400
rs6678176 1 100000827 C T 0.383 0.02553138 0.02287662 0.2645817 4400
rs78590530 1 100000948 A G 0.016 0.171376 0.08757958 0.05035017 4400
rs149636485 1 100001060 A G 0.004 -0.03363731 0.1819208 0.8529224 4400
rs116216467 1 100001233 C T 0.043 -0.06690947 0.05683414 0.238941 4400
답변1
숫자가 아닌 문자열이 포함된 첫 번째 줄로 인해 오류가 발생합니다. 다음과 같이 제외할 수 있습니다.
NR!=1 { $11 = $7/$8 }
1
이제 열 8에 0이 있을 수 있다고 생각되면 $8이 0이 아닌지 확인해야 합니다. 패턴에 조건을 추가할 수 있습니다.
NR!=1 && $8!=0 { $11 = $7/$8 }
1
또는 if
다음을 추가하세요.
{ if (NR!=1 && $8!=0) $11 = $7/$8; print }
음수 값이 왜 문제인지 이해가 되지 않습니다.
답변2
awk 'BEGIN{print "SNP CHR BP A1 AX A1_FREQ BETA SE P OBS_CT"}NR>1{$11=$7-$8;print $0}' filename
output
SNP CHR BP A1 AX A1_FREQ BETA SE P OBS_CT
rs10875231 1 100000012 T G 0.405 -0.0456807 0.02260471 0.04335677 4400 -0.0682854
rs6678176 1 100000827 C T 0.383 0.02553138 0.02287662 0.2645817 4400 0.00265476
rs78590530 1 100000948 A G 0.016 0.171376 0.08757958 0.05035017 4400 0.0837964
rs149636485 1 100001060 A G 0.004 -0.03363731 0.1819208 0.8529224 4400 -0.215558
rs116216467 1 100001233 C T 0.043 -0.06690947 0.05683414 0.238941 4400 -0.123744