【问题标题】:Why does awk function only return last line from file?为什么 awk 函数只返回文件的最后一行?
【发布时间】:2013-03-22 14:22:07
【问题描述】:

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

感谢您的帮助。

【问题讨论】:

  • 除非您使用的是 C shell 衍生版本,否则反斜杠是不必要的。 shell 知道单引号字符串继续,因为它还没有看到第二个单引号。

标签: unix awk


【解决方案1】:

试试这个:

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

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

【讨论】:

  • 太棒了。它完美地工作。感谢您的解释和想法。
猜你喜欢
  • 2020-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多