当我将ffmpeg的输出打印到文件时,我得到这样的结果:
frame=*
现在我希望所有与ffmpeg -v info -i input.ext -f null 2>&1 | awk '/frame=/{gsub(/.*/, $0)};{print}'
匹配的行都被替换,并且只有最后一行当前行被打印到文本文件中(实时)。
这可能吗?
目前我有这条线:
frame=*
它几乎可以工作,除了包含$PATH = ".\file.xml"
$XML = [xml](Get-Content -path $PATH)
$NSMGR = New-Object System.Xml.XmlNamespaceManager($XML.NameTable)
$NSMGR.AddNamespace("ns", $XML.DocumentElement.NamespaceURI)
$XML.selectSingleNode("//ns:component[@name='Microsoft-Windows-Shell-Setup']", $NSMGR)
$NEWCHILD = $XML.CreateElement("TESTELEMENT")
$NEWCHILD.set_innerXML("TESTTEXT")
$XML.save(".\file.xml")
的所有行都是空的。
答案 0 :(得分:1)
您可以从awk中截断文件,并在每行写入一次,如下所示:
awk '/frame=/ { close("file"); print > "file" }'
在awk中使用>
时,它会在写入之前打开并截断文件。随后写入同一文件。如果每次都关闭文件,那么下次写入时它总是会截断它。
答案 1 :(得分:0)
您可以使用此过滤器:
awk '/frame=/{f=$0; next}END{print f}'
它会在frame=
中保存最新的行匹配f
而不打印它,并在脚本末尾打印保存的值。