1

我正在使用 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 的最后一行(其中包含多行数据)。

谢谢你的帮助。

4

1 回答 1

3

试试这个:

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

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

于 2013-03-22T14:29:04.603 回答