对于这样的文件名:
fileLoad.xml2017-12-21_10_55_53-153.txt
otherFile.xml2017-12-20-11_23_01-87899.txt
someFile.xml2017-11-30-21_00_59-1.txt
我想要完成的awk
是隔离文件名.xml
,然后隔离和格式化时间戳以在 csv/数据库中使用。
我有以下内容:
NR==1 {
fn=substr(FILENAME, 0, FILENAME-5);
ts=fn;
sub(/[0-9]{4}.*$/,"",fn);
sub(/^\w+\.xml/,"",ts);
} {
printf "fn\tts"
}
我可以从最后去掉'-',但之后我不知道如何在 awk 中将剩余的时间戳转换为2017-11-30 21:00:59
.
这行得通,虽然我个人不会为此使用 awk,但我会使用 gawk,它有一些重要的特性可以使这种精确的类型操作变得容易,gensub()..
由于您指定了 awk,因此这是一种方法,虽然有点基本。
请注意,由于没有 gensub,我将 0 美元的价值转移给了两个持有者,所以我可以去掉一个的开头和另一个的结尾。
如您所见,剥离初始启动器/结束器很容易,这样您就只剩下日期/时间数据来进一步处理了。
使用 gawk 和 gensub 更容易。
请注意,开始/结束模式做同样的事情,一个采用实际模式并复制它,第二个只是说,给我前 10 个匹配到 [0-9-] 和最后 8 个匹配到 [0-9_] ,这取决于哪个更容易阅读。
真正的问题是,如果您使用 Perl 来完成这项工作是否会更好。