从文件名替换文件的内容

从文件名替换文件的内容

我想准备一个脚本,其中文件内容随文件名而变化。

假设我有一个文件名ABC_20161027220153.txt,文件的内容就像

2000|2000_ABC|04|||0000000000||

我想制作一个脚本,其中文件内容如下所示更改

2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

我怎样才能做到这一点?

答案1

为此有几个步骤:

  1. awk 知道变量中的当前文件名FILENAME
  2. 如果我们没有将文件名拆分为解码的元素(此处硬编码在每个新输入文件的第一行完成),那么我们使用该substr函数来帮助我们。
  3. 对于每个输入行,之前通过语句为我们分割|符号BEGIN,将字段 4 和 5 替换为其新值
  4. 打印重建的线

将它们放在一起(我将其命名为“abc.awk”):

BEGIN { OFS=FS="|" }

{
  if (FNR == 1) {
    f4=substr(FILENAME, index(FILENAME, "_") + 1, 8);
    f5a=substr(FILENAME, index(FILENAME, "_") + 9, 6);
    f5=substr(f4, 7, 2) "." substr(f4, 5, 2) "." substr(f4, 1, 4) " " \
        substr(f5a, 1, 2) "." substr(f5a, 3, 2) "." substr(f5a, 5, 2);
  }

  $4=f4
  $5=f5
  print $0
}

$ awk -f abc.awk ABC_20161027220153.txt
2000|2000_ABC|04|20161027|27.10.2016 22.01.53|0000000000||

相关内容