ソースファイル行の文字列は、ターゲットファイルの一致する文字列に置き換えられます。

ソースファイル行の文字列は、ターゲットファイルの一致する文字列に置き換えられます。

ターゲットファイルの内容

shivps 256146 54645 46561431
kaspsa 212142 21244 21144664

ソースファイルの内容

shivps 111111 22222 33333333
kaspsa 222222 11111 44444444

ソースファイルからターゲットファイルまで同じ名前の行を別のデータに置き換える方法

答え1

while 読み込みループを使用すると、ファイルをその場で編集せず、結果のみが stdout として出力されます。

source.txtの内容

shivps 111111 22222 33333333 Iam_from_source.txt
Iam_from_source-source-source
kaspsa 222222 11111 44444444 Iam_from_source.txt
Iam_from_source-source-source 

Destination.txtの内容

shivps 256146 54645 46561431 Iam_from_destination.txt
Iam_from_destination-destination
kaspsa 212142 21244 21144664 Iam_from_destination.txt
Iam_from_destination-destination

スクリプト。

#!/usr/bin/env bash

source=$1
destination=$2

while IFS= read -r lines_from_source <&3; do
   IFS= read -r lines_from_destination
   if [[ ${lines_from_source%% *} == ${lines_from_destination%% *} ]]; then
     printf '%s\n' "${lines_from_source//$lines_from_destination}"
   else
     printf '%s\n' "$lines_from_destination"
   fi
done 3<"$source" < "$destination"

スクリプトを実行します。

./script source.txt destination.txt

出力

shivps 111111 22222 33333333 Iam_from_source.txt
Iam_from_destination-destination
kaspsa 222222 11111 44444444 Iam_from_source.txt
Iam_from_destination-destination
  • 提供されたサンプルデータとして機能しますが、一致するパターンが多いと失敗する可能性があります。
  • 大容量データ/ファイルの場合、非常に遅くなります。

関連情報