البرمجة

كيفية استبدال قيم في ملفات باستخدام AWK و SED

لتحقيق ذلك باستخدام أدوات مثل awk أو sed، يمكنك استخدام الأمر التالي:

bash
awk 'NR==FNR{a[$2]=$3; next} $2 in a {$3=a[$2]} 1' f1 f2

أو يمكنك استخدام sed مع مساعدة join لإنجاز ذلك:

bash
join -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.

إذا كان لديك أي استفسار إضافي أو تحتاج إلى معلومات أخرى، فلا تتردد في طرحها.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!