bash - 用 awk 迭代一些 thousend 文件并在一两次运行中写入相同的文件
问题描述
我在自己的目录中有很多文件。都具有相同的名称结构:
2019-10-18-42-IV-Friday.md
2019-10-18-42-IV-Saturday.md
2019-10-18-42-IV-Sunday.md
2019-10-18-43-43-IV-Monday.md
2019-10-18-42-IV Tuesday.md
等等。
这是详细的:yyyy-mm-dd-dd-week of year-actual quarter-day of week.md
我想在每个文件中写一行作为第二行: 使用 awk 我想从文件名中提取和扩展日期,然后将它们写入适当的文件。
这就是我失败的地方。
%!awk -F"-"-" '{print "Today is $6 ", the " $3"."$2"."$1", Kw "$4", in the" $5 ". Quarter."}'
效果很好,我得到了我想要写入文件的句子。
所以把整个事情放在一个循环中:
ze.sh
#!/bin/bash
for i in *.md;
j = awk -F " " '{ print "** Today is " $6 ", the" $3"." $2"." $1", Kw " $4 ", in the " $5 ". Quarter. **"}' $i
Something with CAT, I suppose.
end
我该怎么做才能使变量i遍历所有文件,从 $i 中提取j的值,然后将 $j 写入每个文件的第二行?
非常感谢你的帮助。
[使用 manjaro linux 和 bash] GNU bash,版本 5.0.11(1)-release (x86_64-pc-linux-gnu) Linux 版本 5.2.21-1-MANJARO
解决方案
您能否尝试以下操作(尚未测试,awk
需要 GNU)。为了在第二行写入日期,我选择了与 Input_file 中包含日期的相同格式。
awk -i inplace '
FNR==2{
split(FILENAME,array,"-")
print array[1]"-"array[2]"-"array[3]
}
1
' *.md
如果可能,请先尝试不使用-i inplace
选项,这样更改就不会保存到 Input_file 中,一旦您对结果感到满意,那么您可以如上所示将其添加到代码中以对 Input_file 进行就地更改。
对于支持就地更新的 awk 版本,请参阅 James sir 发布的链接。
推荐阅读
- javascript - 更改同一行的值列
- java - 创建 Spring Boot Otka 资源服务器时出现异常
- r - 无法绘制数据子组的均值
- python - 如何以不同的方式更新屏幕的字体?
- javascript - 如何将来自 URL 的参数值作为变量插入到 Google Analytics(分析)代码中?
- java - 如何使用来自 foreach 的被调用函数的返回值
- node.js - 从 Google Cloud Storage 流式下载图像时如何正确设置响应标头
- javascript - 基于当前 URL 问题的主动导航类
- php - 如何在phpspreadsheet中使用linest函数?
- swift - 对 .map 变换闭包的困惑