ファイル名からファイルの内容を置き換える

ファイル名からファイルの内容を置き換える

ファイル名に応じてファイルの内容が変わるスクリプトを用意したいと思います。

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. 各入力行について、前のステートメントは us の|シンボルを分割し、BEGINフィールド 4 と 5 を新しい値に置き換えました。
  4. 再構成されたライン印刷

それらを1つにまとめると(私は名前を「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||

おすすめ記事