ターゲットファイルの内容
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
- 提供されたサンプルデータとして機能しますが、一致するパターンが多いと失敗する可能性があります。
- 大容量データ/ファイルの場合、非常に遅くなります。