我有很多文件。文件格式为年(4位)月(2位)日(2位)
示例文件名:
- 20150101.txt
- 20150102.txt
示例文件名的内容
00:00:13 -> 001528
我想从文件名中提取数据作为日期,然后将其插入文件中
期望的输出
2015-01-01T00:00:13 001528
或者
2015-01-01 00:00:13 001528
我尝试了以下代码之一
for files in *txt; do
awk -F "->" 'BEGIN{OFS=""} {print FILENAME" ",$1, $2}' <$files > $files.edited
mv $files.edited $files
done
请指导。
如果您有 GNU awk (
gawk
),那么您可以使用其内置的时间函数将文件名和内容的片段转换为纪元时间,然后根据选择的格式进行转换。前任。给定
然后
这将为您提供所需的输出
sed
:要将每个输出实际插入每个文件,您不需要像在循环中那样重定向。您可以简单地使用该
-i
选项而不是-e
.s
substitute) 命令使用以下语法:s/regexp/replacement/flags
.
匹配任何字符并^.
匹配一行的第一个字符&
反向引用模式空间的整个匹配部分s/^./$files&/
表示用第一个字符之前的文件名替换第一个字符s/./&-/4
使用数字标志4
将第 4 个字符(的第 4 次匹配.
)替换-
为第 4 个字符之后s/./&-/7
将第 7 个字符替换为第 7 个字符-
后(注意第 6 个字符插入-
第 4 个字符后变为第 7 个字符)。而且当然,
s/.txt/T/
.txt
用T
和代替s/ -> / /
->
用一个空格代替。这是输出: