나는 거대한 다중 열 출력 파일을 생성하고 각도 모집단에 대한 일부 분석 소프트웨어를 실행했습니다. 안타깝게도 각도는 -180° ~ 180°로 정의되어 있는데 0°-360°가 필요합니다.
내가하고 싶은 것은 전체 입력 파일을 가져 와서 각 음수 값을 "360+ 값"의 합계로 바꾸고 각 양수 값은 변경하지 않고 원래 입력 파일과 마찬가지로 탭으로 구분 된 출력 파일에 모든 것을 인쇄하는 것입니다.
나는 한 번에 한 열씩만 처리했습니다.
awk 'BEGIN {OFS="\t" }; { if($2 < 0) print $1, 360+$2; else print $1, $2}' INPUT > OUTPUT
나는 다음과 같이 더 많은 "if"를 포함함으로써 각 열에 대해 이 작업을 수행할 수 있다고 생각했습니다.
awk 'BEGIN {OFS="\t" }; { if($2 < 0 || $3 < 0) print $1, 360+$2, 360+$3; else print $1, $2, $3}' INPUT > OUTPUT
또는 이와 유사한 것이지만 이를 수행하는 더 좋은 방법이 있어야 합니다. " "을(를) 사용해 보았지만 $0
작동하지 못했습니다.
그렇다면 각 열의 모든 값이 0(음수)보다 작은지 확인하고 줄을 따라 모든 음수 값에 360을 추가하면서 모든 양수 값을 그대로 인쇄하는 좋은 단일 라이너(또는 입력 스크립트)가 있습니까? ? :
awk 'BEGIN {OFS="\t" }; { if($0 < 0) print 360+$0; else print $0}' INPUT > OUTPUT
기본적으로 이것이 내가 원하는 것이지만 이 명령이 작동하지 않는다는 것을 이해합니다. 입력과 동일한 형식을 유지하고 값이 음수이면 360을 추가하고 인쇄하고, 그렇지 않으면 그냥 인쇄합니다.
미리 감사드리며 모든 의견에 감사드립니다.
답변1
for
다음과 같은 간단한 루프를 사용할 수 있습니다 .
{for(i=1;i<=NF;i++){if($i < 0) $i+=360}; print}