從檔案名稱替換檔案的內容

從檔案名稱替換檔案的內容

我想準備一個腳本,其中文件內容隨文件名而變化。

假設我有一個檔名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||

相關內容