열의 추출된 부분에 대해 연산을 수행합니다.

열의 추출된 부분에 대해 연산을 수행합니다.

다음 필드가 포함된 텍스트 파일이 있습니다.

 1; 3435; 45--XY 
 2; 3436; 15--XY 
 3; 3437; 23--XY

첫 번째 열의 숫자 부분을 마지막 열과 곱한 다음 출력 파일에 표시해야 합니다. 어떻게 해야 합니까? 제 생각에는가장 직접적인 순서가 될 것입니다.

시험을 마친:awk -F';' '{print substr($3,1,2)* $1}' input.txt > output.txt

답변1

단순한

awk '{print $1 * $3}' input.txt

명령이 작업을 수행합니다. 이 경우 필드에서 숫자를 추출할 필요가 없습니다.

이는 디지털 변환 메커니즘으로 인해 발생합니다 awk.awk에서 문자열과 숫자를 변환하는 방법,지금 바로:

문자열의 숫자 접두사를 숫자로 해석하여 문자열을 숫자로 변환합니다. "2.5"는 2.5로 변환되고 "1e3"은 1,000으로 변환되며 "25fix"는 25로 변환됩니다. 유효 숫자가 0으로 변환되므로 해석할 수 없는 문자열입니다.

산출

45
30
69

답변2

해결책:

awk -F';' '{ gsub(/[^0-9]+/,"",$NF); print $1*$NF }' input.txt > output.txt
  • gsub(/[^0-9]+/,"",$NF)[^0-9]+-마지막 필드에서 숫자가 아닌 문자를 모두 제거합니다.$NF

콘텐츠 output.txt:

45
30
69

관련 정보