2013-03-22 1 views
1

awk를 사용하여 파일의 일부 필드를 다시 포맷하고 awk 함수를 사용하여 음수 일 경우 한 필드 값을 수정합니다. awk 명령은 다음과 같습니다.awk 함수가 파일의 마지막 줄만 반환하는 이유는 무엇입니까?

awk 'function fix_neg(value) {\ 
if(value < 0)\ 
return '$new_value'\ 
else\ 
return value\ 
} END { print $2,$1,fix_neg($3) }' input_file.txt 

여기서이 호출 전에 $ new_value가 설정되었습니다. 필자는 왜 이것이 여러 줄의 데이터를 포함하고있는 input_file.txt의 마지막 줄만 다시 포맷하는지 이해하지 못합니다.

도움 주셔서 감사합니다.

+0

아마도 C 쉘 파생을 사용하지 않는 한, 백 슬래시는 필요하지 않습니다. 셸은 두 번째 작은 따옴표를 아직 보지 않았으므로 작은 따옴표 문자열이 계속된다는 것을 알고 있습니다. –

답변

3

이 시도 : 당신이 END{..} 블록에 인쇄 문을 넣어 때문에 프로그램에서

awk -v newV="$new_value" '{print $2,$1,($3<0?newV:$3)}' inputfile 

을, 당신은 단지 마지막 줄에 데이터를 얻었다. 각 행이 아닌 전체 파일이 처리 된 후에 트리거됩니다. END을 삭제하면 의도 한대로 작동합니다.

+0

굉장합니다. 그것은 완벽하게 작동합니다. 당신의 설명과 아이디어에 감사드립니다. – geoweaser

관련 문제