لتحقيق ذلك باستخدام أدوات مثل awk
أو sed
، يمكنك استخدام الأمر التالي:
bashawk 'NR==FNR{a[$2]=$3; next} $2 in a {$3=a[$2]} 1' f1 f2
أو يمكنك استخدام sed
مع مساعدة join
لإنجاز ذلك:
bashjoin -j 2 -o 1.1,1.2,1.3,2.3 <(sort -k2 f1) <(sort -k2 f2) | sed 's/[^ ]* //' | column -t
يقوم الأمر الأول (awk
) بفحص كل سطر في الملفين f1
و f2
، يحتفظ بالقيمة الثالثة في f1
في مصفوفة مؤقتة a
باستخدام العمود الثاني كمفتاح. ثم عند قراءة الملف الثاني (f2
)، يتحقق إذا كانت القيمة الثانية موجودة في المصفوفة a
، إذا كان الأمر كذلك، يقوم بتغيير القيمة الثالثة في f2
بالقيمة المحفوظة في المصفوفة.
الأمر الثاني (join
) يقوم بالانضمام بين الملفين f1
و f2
بناءً على العمود الثاني، ثم يقوم sed
بتنظيف الناتج من join
و column -t
بتنسيق الناتج لجعله أكثر قراءة واضحة.
المزيد من المعلومات
بالتأكيد! يُفترض أن الملفات f1
و f2
تحتوي على البيانات المعروضة في السؤال، وهي عبارة عن ثلاثة أعمدة مفصولة بمسافات. يجب أن تكون الأعمدة المقارنة هي العمود الثاني في كل ملف، وإذا كانت القيمة في العمود الثاني متطابقة بين الملفين، يجب استبدال القيمة في العمود الثالث من f2
بالقيمة الموجودة في العمود الثالث من f1
.
إذا كان لديك أي استفسار إضافي أو تحتاج إلى معلومات أخرى، فلا تتردد في طرحها.