다음과 같은 몇 줄이 있습니다.
N2O + M = N2 + O + M 1.300E+11 0.00 59620.0
마지막에서 세 번째 필드를 와 함께 작동하지 않는 요소로 바꿔야 합니다 awk
. 그러나 마지막 필드나 마지막 필드에서 두 번째 필드에 동일한 표현식을 적용하면 작동합니다. 과학적 표기법 및 각각을 사용하여 테스트했는데 awk
작동합니다. 예는 다음과 같습니다:
#works as expected; last field gets multiplied by -1
echo "N2O + M = N2 + O + M 1.300E+11 0.00 59620.0" | awk '{gsub($(NF),-1.0*$(NF))};{print}'
N2O + M = N2 + O + M 1.300E+11 0.00 -59620
#does not work; third from last field stays unchanged
echo "N2O + M = N2 + O + M 1.300E+11 0.00 59620.0" | awk '{gsub($(NF-2),-1.0*$(NF-2))};{print}'
N2O + M = N2 + O + M 1.300E+11 0.00 59620.0
왜 이런 일이 발생하는지에 대한 제안이 있으십니까?
답변1
답은 다음에서 찾을 수 있습니다.인간의 awk:
대체를 통해 숫자 표현식을 문자열로 변환표현와 함께
sprintf(CONVFMT, expr)
, 그렇지 않은 경우표현호스트 시스템에서 정확한 정수로 표현된 다음sprintf("%d", expr)
.
파편()sprintf(3)
의 기능을 복사하는 AWK 내장 함수입니다.컨벌루션 FMT는 숫자를 문자열로 내부 변환하는 데 사용되는 내장 변수이며 로 초기화됩니다"%.6g"
.
gsub
따라서 문자열 조작을 사용하는 함수를 호출하면앗필드가 변환되지만 sprintf("%d", 1.300E+11)
행 130000000000
에 해당 텍스트가 없으므로 대체가 필요하지 않습니다.