我正在使用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 :(得分:3)
试试这个:
awk -v newV="$new_value" '{print $2,$1,($3<0?newV:$3)}' inputfile
在您的程序中,您只获得了最后一行数据,因为您将print语句放在END{..}
块中。它在整个文件处理后触发,而不是每行。删除END
,它将按预期工作。