ハードコーディングなしで特定の行に文字列を追加する方法

ハードコーディングなしで特定の行に文字列を追加する方法

2つのファイルがあり、最初のファイルには出力があり、他のファイルにはテンプレートがあります。値をハードコードせずに出力のテンプレートにIDを追加したいと思います。

 Output.txt,
      abc  8392382222
      def  9283923829
      ghi  2392832930

Template file,
    Pool : 1
      Some text
      Some text
      Some text
      name:
      no:
      London
      UK
      name:
      no:
      London
      UK
      name:
      no:
      London
      UK

    Pool : 2
      Some text
      Some text
      Some text
      name:
      no:
      London
      UK
      name:
      no:
      London
      UK
      name:
      no:
      London
      UK

以下のようにテンプレートに出力ラインを追加したいと思います。

    Pool : 1
      Some text
      Some text
      Some text
      name: abc
      no: 8392382222
      London
      UK
      name: def
      no: 9283923829
      London
      UK
      name: ghi
      no: 2392832930
      London
      UK

    Pool : 2
      Some text
      Some text
      Some text
      name: abc
      no: 8392382222
      London
      UK
      name: def
      no: 9283923829
      London
      UK
      name: ghi
      no: 2392832930
      London
      UK

ベストアンサー1

Bashを使用すると、同時に2つのファイルを読み取ることができます。別のファイル記述子にリダイレクトするだけです。

#!/bin/bash
while read -r -a values ; do
    for i in {0..3} ; do
        read -u 3 line
        echo "$line ${values[$i]}" 
    done
done < output.txt 3<template.txt

通常、テンプレートファイルには繰り返す必要がある4行しか含まれていないため、配列として読み取ることができます。今後値を含むファイルを処理するため、追加の記述子は必要ありません。

#!/bin/bash
template=()
while read -r line ; do
    template+=("$line")
done < template.txt

while read -r -a values ; do
    for (( i=0; i<${#template[@]}; ++i )) ; do
        echo "${template[$i]} ${values[$i]}" 
    done
done < output.txt

おすすめ記事