자연 로그(LN)를 계산하는 대규모 데이터 세트가 있습니다. 그러나 많은 경우 음수 값이 있으며 awk는 발생할 때마다 경고 줄을 내보내고 새 필드를 인쇄하지 않습니다. 추가 필드를 계산하고 추가하는 방법을 이미 알고 있습니다. 그러나 awk를 사용하여 양수 데이터 포인트의 값을 인쇄하고 음수 데이터의 경우 NR과 같은 일종의 누락된 데이터 식별자를 인쇄하는 방법을 잘 모르겠습니다. 이 경우 데이터는 $11이고 (LN) 출력은 $12로 인쇄됩니다. 감사해요
QUEENS_DEC,5/26/2002,3.06, ,16.61342593,0.830833333,20020526,0,50.5414,0.0391322,50.5805,**3.9236**
QUEENS_DEC,5/27/2002, ,0.8150,19.73148148,0.812083333,20020527,0.0353628,60.0271,0.0382491,60.1007,**4.0960**
QUEENS_DEC,5/28/2002, , ,19.15046296,0.77,20020528,0,58.2595,0.036267,58.2958,**4.0655**
QUEENS_DEC,5/29/2002,1.83, ,21.76388889,0.783333333,20020529,0,66.2101,0.036895,-66.247,**NR**
답변1
테스트를 사용할 수 있습니다 if
.
예를 들어:
awk -F, '
BEGIN { OFS="," }
{ if ($11<=0) { $12="NR" } else { $12=log($11) } ; print }
'
이는 표시된 값에 따라 필드 12를 문자열 "NR" 또는 필드 11의 로그로 설정합니다.
입력 파일을 사용하면 이제 출력은 다음과 같습니다.
QUEENS_DEC,5/26/2002,3.06, ,16.61342593,0.830833333,20020526,0,50.5414,0.0391322,50.5805,3.92357
QUEENS_DEC,5/27/2002, ,0.8150,19.73148148,0.812083333,20020527,0.0353628,60.0271,0.0382491,60.1007,4.09602
QUEENS_DEC,5/28/2002, , ,19.15046296,0.77,20020528,0,58.2595,0.036267,58.2958,4.06553
QUEENS_DEC,5/29/2002,1.83, ,21.76388889,0.783333333,20020529,0,66.2101,0.036895,-66.247,NR