단일 파일에서 서로 데이터세트를 빼려고 합니다. 그러나 스크립트가 출력 값에 도달하면 na
출력이 올바르지 않습니다.
입력 파일:
# <header>
2002 328 0.1345 2002 328 na
2002 329 na 2002 329 0.281065021
2002 330 0.9 2002 330 0.1
현재 사용하고 있는 awk 스크립트는 다음과 같습니다.
NR==1{print $0, " diff.\n"}
NR>2{printf("%s\t%7.6f\n", $0, $3-$6)}
출력:
# <header> diff.
2002 328 0.1345 2002 328 na 0.134500
2002 329 na 2002 329 0.281065021 -0.281065
2002 330 0.9 2002 330 0.1 0.800000
na
이 경우에는 분석을 더 쉽게 하기 위해 측정값 대신 " "가 표시되는 출력 열을 찾고 있습니다 .
원하는 출력:
# <header> diff.
2002 328 0.1345 2002 328 na na
2002 329 na 2002 329 0.281065021 na
2002 330 0.9 2002 330 0.1 0.800000
답변1
NR>2
예를 들어 다음과 같이 명령문을 조건부로 만들어 보십시오 .
BEGIN {OFS="\t"}
NR==1 {print $0, "diff.\n"}
NR>2 {print $0, ( $3=="na" || $6=="na" ? "na" : sprintf("%7.6f", $3-$6) )}
$3=="na" || $6=="na"
이는 조건 으로 사용됩니다 .if either field three or six are "na", print "na", else print the subtraction
- 필드 3 또는 6이 숫자가 아니고 "
na
"도 아닌 경우 더 복잡한 접근 방식을 시도해 볼 수 있습니다.$3 !~ /^[0-9]+(\.[0-9]+)?$/ || $6 !~ /^[0-9]+(\.[0-9]+)?$/
\t
위의 내용은 일부 형식을 단순화하기 위해 출력 필드 구분 기호 로도 사용됩니다.