البرمجة

مقارنة قيم التواريخ باستخدام AWK

لنقم أولاً بتحليل المشكلة. لديك ملف يحتوي على سجلات تتكون من اسم متبوع بتواريخ وقيم مرتبطة بهذه التواريخ، وتفصل التواريخ عن القيم باستخدام علامة العمود (|). يتوجب عليك مقارنة القيم المتوافقة لكل تاريخ في سجلات اثنين (مثل name1 و name2) الموجودين في الملف.

لحل هذه المشكلة باستخدام awk، يمكنك استخدام الحلقات والشروط لمقارنة القيم بناءً على التواريخ المتطابقة. فيما يلي كيف يمكن تنفيذ ذلك:

bash
awk 'BEGIN { FS="|"; } # تعيين علامة الفاصلة للحقول كعلامة التبويب { if (NR == line1 || NR == line2) { # التحقق مما إذا كانت هذه السطور هي السطور التي تريد مقارنتها name = $1; # اسم السطر printf "%s: ", name; # طباعة اسم السطر for (i = 2; i <= NF; i++) { # البدء من الحقل الثاني حتى نهاية السطر split($i, parts, / /); # تقسيم الحقل إلى جزأين باستخدام علامة الفاصلة dates[i-1] = parts[1]; # تخزين التاريخ في مصفوفة values[i-1] = parts[2]; # تخزين القيمة في مصفوفة } # مقارنة القيم المتطابقة لكل تاريخ for (j = 1; j <= NF-1; j++) { if (values[j] == values[j+NF-1]) { # المقارنة بين القيم المتطابقة في السطرين printf "%s is equal on %s, ", name, dates[j]; } else { printf "%s is not equal on %s, ", name, dates[j]; } } printf "\n"; # إنهاء السطر } }' line1=2 line2=3 file.txt # تحديد رقم السطر لكل سطر تريد مقارنته

تأخذ هذه الأوامر سلسلة الإدخال، وتقوم بتحليلها ومقارنة القيم المتطابقة لكل تاريخ في السجلين المحددين. بمجرد تعيين قيم line1 و line2، سيتم استخراج البيانات المرتبطة بهما ومقارنتها. سيتم طباعة نتائج المقارنة بحيث تشير إلى ما إذا كانت القيم متساوية أم لا لكل تاريخ.

المزيد من المعلومات

بعد أن قمت بتنفيذ الأوامر السابقة، ستحصل على نتائج المقارنة بين القيم المتطابقة لكل تاريخ في السجلين المحددين. ستظهر النتائج في صيغة مثل:

vbnet
name1: name1 is not equal on 20160801, name1 is not equal on 20160802, name1 is not equal on 20160803, name1 is not equal on 20160804, name1 is not equal on 20160805, name1 is not equal on 20160806, name1 is not equal on 20160807, name1 is not equal on 20160808, name1 is not equal on 20160809, name1 is not equal on 20160810, name1 is not equal on 20160811, name1 is not equal on 20160812, name1 is not equal on 20160813, name1 is not equal on 20160814, name1 is not equal on 20160815, name1 is not equal on 20160816, name1 is not equal on 20160817, name1 is not equal on 20160818, name1 is not equal on 20160819, name1 is not equal on 20160820, name1 is not equal on 20160821, name1 is not equal on 20160822, name1 is not equal on 20160823, name1 is not equal on 20160824, name1 is not equal on 20160825, name1 is not equal on 20160826, name1 is not equal on 20160827, name1 is not equal on 20160828, name1 is not equal on 20160829, name1 is not equal on 20160830, name1 is not equal on 20160831, name2: name2 is not equal on 20160801, name2 is not equal on 20160802, name2 is not equal on 20160803, name2 is not equal on 20160804, name2 is not equal on 20160805, name2 is not equal on 20160806, name2 is not equal on 20160807, name2 is not equal on 20160808, name2 is not equal on 20160809, name2 is not equal on 20160810, name2 is not equal on 20160811, name2 is not equal on 20160812, name2 is not equal on 20160813, name2 is not equal on 20160814, name2 is not equal on 20160815, name2 is not equal on 20160816, name2 is not equal on 20160817, name2 is not equal on 20160818, name2 is not equal on 20160819, name2 is not equal on 20160820, name2 is not equal on 20160821, name2 is not equal on 20160822, name2 is not equal on 20160823, name2 is not equal on 20160824, name2 is not equal on 20160825, name2 is not equal on 20160826, name2 is not equal on 20160827, name2 is not equal on 20160828, name2 is not equal on 20160829, name2 is not equal on 20160830, name2 is not equal on 20160831,

هذا يشير إلى أنه لم يتم العثور على أي قيم متساوية بين السجلين name1 و name2 لجميع التواريخ.

لتحسين الأمر، يمكنك تغيير الرسالة المطبوعة حسب الحالة، مثلاً إذا كانت القيم متساوية، يمكنك طباعة رسالة تفيد بذلك. بالإضافة إلى ذلك، يمكنك ضمان أن السجلات المقارنة تحتوي على نفس عدد التواريخ لتجنب الأخطاء.

أتمنى أن يساعدك هذا المقال في فهم كيفية استخدام أداة AWK لمقارنة القيم في ملفات النص.

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

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

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر