首页 > 解决方案 > 用 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

标签: bashawk

解决方案


您能否尝试以下操作(尚未测试,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 发布的链接。

使用 awk 保存修改


推荐阅读