任务:
我得到了一个带有字幕的文件,其中时间非常糟糕。不过都是一样的时间。我想在它们上运行一个脚本来增加/减少一定的时间。我正在尝试通过 linux 中的命令行来执行此操作。所以我正在尝试使用 awk 和/或 sed。不过,我对他们没有经验。
我要更改的字符串如下所示:01:35:12,300
问题:
使用 awk 我设法编写了一个脚本文件,我可以像这样调用它:
awk -f subtitles_shift.awk change="-01:00:11" subtitle_sample
我的脚本基本上做的是:它将文件中的字符串以及作为参数传递的字符串转换为秒。进行更改,转换回字符串,然后再次吐出整个内容。它有效。
但是,唯一的事情是,我现在不知道如何将这些更改写回文件......
我的想法:
我认为,我应该使用 sed 来完成这项工作,因为它允许我写回文件。但是对于 sed,我不知道如何编写这样一个脚本,在应用替换字符串之前对搜索字符串进行计算。
sed 's/..:..:..,.../REPLACEMENT/' <old >new
在将替换字符串返回给 sed 之前,如何对匹配的模式进行所有这些必要的计算?
我希望你明白我的意思...
最后但并非最不重要的:
提前非常感谢!
代码示例——代码示例
这是我的 awk 脚本的主要部分:
# looking for the lines that hold the time strings
/^..:/ {
# picking the first and third column. These are the times
start = $1;
end = $3;
# calculating changes by invoking functions
start_new = alter_time(start, change, sign);
end_new = alter_time(end, change, sign);
}
可能的解决方案
地狱,是的!我可以处理所有内容,对必要的行进行数学运算,然后将所有行写回文件。到目前为止,这似乎有效:
{
if ($1 ~ /^..:/) {
start = $1;
end = $3;
start_new = alter_time(start, change, sign);
end_new = alter_time(end, change, sign);
print start_new " --> " end_new > "times.srt";
} else {
print $0 > "times.srt";
}
}