打印文件的最后一行并使用 awk 附加一个值
print last line of a file and append a value using awk
我有一个 python 脚本,它以两列的形式将数据 x 和 y 输出到文件 averages.dat
。
我正在尝试使用 awk 获取 averages.dat
的最后一行,在新的第 3 列中添加一个值,然后将其附加到文件 averages2.dat
.
我一直在尝试 awk END{print} averages.dat
获取最后一行并且
awk '{print [=14=], value}' averages.dat
将值附加到第三列的末尾。
这两个单独使用都很好,但我试过将它们组合使用都无济于事。我知道我需要在最后使用 >> averages2.dat
来附加到新文件。
关于合并这两个 awk 命令有什么建议吗?还是有比 END{print}
更好的获取最后一行的方法?因为我觉得这可能是问题所在。
您可以使用 sed
:
sed -i.bak -n '$s/.*/& value/p' file
解释:
-i.bak
- 使用内联编辑并使用 .bak
扩展名保存原始文件
-n
- 禁止打印
$s
- 仅替换最后一行
.*
- 匹配整行
& value
- 在替换中使用完整行,后跟 space 和文字 "value"
p
- 打印替换行
简单
awk 'END { print [=10=], value }' averages.dat >> averages2.dat
END
要理解为后面的block执行的条件;因此,如果已到达输入末尾,则执行 print [=13=], value
。只有在处理最后一条记录时才会出现这种情况。
要在脚本中使用 shell 变量,写
awk -v density="$DENSITY" 'END { print [=11=], density }' averages.dat >> averages2.dat
这会在 awk 代码开始 运行.
之前将 awk 变量 density
设置为 $DENSITY
的值
在这种情况下,awk 比 sed 更健壮,因为使用 sed 您必须将变量直接替换到代码中(例如 "s/.*/& $DENSITY/"
)。然后 sed 最终会将其解释为代码,而不是数据,这意味着如果它包含对 sed 具有特殊含义的字符(例如 &
),sed 将出错或做一些奇怪的事情。 Awk 可以使用上面的调用毫无问题地处理这个问题。
我有一个 python 脚本,它以两列的形式将数据 x 和 y 输出到文件 averages.dat
。
我正在尝试使用 awk 获取 averages.dat
的最后一行,在新的第 3 列中添加一个值,然后将其附加到文件 averages2.dat
.
我一直在尝试 awk END{print} averages.dat
获取最后一行并且
awk '{print [=14=], value}' averages.dat
将值附加到第三列的末尾。
这两个单独使用都很好,但我试过将它们组合使用都无济于事。我知道我需要在最后使用 >> averages2.dat
来附加到新文件。
关于合并这两个 awk 命令有什么建议吗?还是有比 END{print}
更好的获取最后一行的方法?因为我觉得这可能是问题所在。
您可以使用 sed
:
sed -i.bak -n '$s/.*/& value/p' file
解释:
-i.bak
- 使用内联编辑并使用.bak
扩展名保存原始文件-n
- 禁止打印$s
- 仅替换最后一行.*
- 匹配整行& value
- 在替换中使用完整行,后跟 space 和文字 "value"p
- 打印替换行
简单
awk 'END { print [=10=], value }' averages.dat >> averages2.dat
END
要理解为后面的block执行的条件;因此,如果已到达输入末尾,则执行 print [=13=], value
。只有在处理最后一条记录时才会出现这种情况。
要在脚本中使用 shell 变量,写
awk -v density="$DENSITY" 'END { print [=11=], density }' averages.dat >> averages2.dat
这会在 awk 代码开始 运行.
之前将 awk 变量density
设置为 $DENSITY
的值
在这种情况下,awk 比 sed 更健壮,因为使用 sed 您必须将变量直接替换到代码中(例如 "s/.*/& $DENSITY/"
)。然后 sed 最终会将其解释为代码,而不是数据,这意味着如果它包含对 sed 具有特殊含义的字符(例如 &
),sed 将出错或做一些奇怪的事情。 Awk 可以使用上面的调用毫无问题地处理这个问题。