源文件行中的字符串替换为目标文件中匹配的字符串

源文件行中的字符串替换为目标文件中匹配的字符串

目标文件内容

shivps 256146 54645 46561431
kaspsa 212142 21244 21144664

源文件内容

shivps 111111 22222 33333333
kaspsa 222222 11111 44444444

如何用源文件到目标文件的不同数据替换同名行

答案1

使用 while read 循环只会将结果输出到 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 

目的地.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
  • 它适用于您提供的示例数据,如果您有更多模式要匹配,则可能会失败。
  • 对于大数据/文件,速度会非常慢。

相关内容