awk - 필드에 숫자 대신 문자열이 포함된 경우 다른 형식을 사용하는 산술 연산

awk - 필드에 숫자 대신 문자열이 포함된 경우 다른 형식을 사용하는 산술 연산

단일 파일에서 서로 데이터세트를 빼려고 합니다. 그러나 스크립트가 출력 값에 도달하면 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위의 내용은 일부 형식을 단순화하기 위해 출력 필드 구분 기호 로도 사용됩니다.

관련 정보