为什么awk函数只返回文件的最后一行?

时间:2013-03-22 14:22:07

标签: unix 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的最后一行(包含多行数据)。

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

试试这个:

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

在您的程序中,您只获得了最后一行数据,因为您将print语句放在END{..}块中。它在整个文件处理后触发,而不是每行。删除END,它将按预期工作。