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