قبل فترة صادف أن احتجت الى مقطع معين في ملف نصي , والمقطع هذا يتكرر في كل سطر , والملف هذا يحتوي على خمسة اﻻف سطر ! فعلى طول خطرت على بالي فكرة اني استخدم ادوات معالجة النصوص في أنظمة لينكس / يونكس.
طبعاً أدوات معالجة النصوص كثيرة .. منها
grep, uniq, sort, head, tail, cut
طيب هذي عينة من الملف اللي كانت تواجهني المشكلة فيه
1175321,http://www.streetpatrol.ru/includes/,http://www.phishtank.co
1175320,http://hsstudy.org/hss/data/temp/rnails/sdfc.php,http://wwwphp
1175290,http://www.sprs.ru/z/hmrc/hmrc/all/login.aspx.htm,http://www.phishtank.com
وبالنسبة للعينة هذي , المراد من السطر اﻻول هذا النص فقط
www.streetpatrol.ru
وبالنسبة للسطر الثاني المراد فقط هذا النص
hsstudy.org
واخيراً بالنسبة للسطر للثالث , المراد فقط هذا النص
www.sprs.ru
بالنسبة لي قمت بإستخدام اﻻمر cut
وهي اداة تقوم باستخراج النص المطلوب من السطر بحيث تحدد لها المقطع المراد او تحدد لها عدد الاحرف , عفواً .. احسن شي نطبق على مثالنا هذا عشان نفهم تمام !
طيب الحين عندنا اكثر من خمسة اﻻف سطر ! ومن كل سطر نريد فقط نص معين
راح نقسم الطريقة هنا الى عدة اجزاء عشان تكون واضحة ! طيب لو تلاحظون هنا انه النص المراد في السطر اﻻول يقع بين فاصلتين ! حلو هذا راح يسهل امرنا فراح يكون اﻻمر بحالتنا هذه هو
cut -d , -f 2 test.txt > test2.txt
طيب نشرح الخيارات اول :
d = delimiter معناه المحدد وهنا المحدد انا وضعت له فاصلة ” ,” يعني خذ الفاصلة كمحدد .
f 2 = fields معناه الحقول وفي مثالنا هذا حددت له الحقل الثاني.
test.txt = هذا الملف اللي نحتاج نستخرج منها النصوص, يعني مثالنا في هذا الشرح .
> test2.txt = بحيث انه مخرجات اﻻمر اللي طبقناه تطبع في ملف اسمه test2.txt .
بعد تطبيقنا للامر اللي في اﻻعلى راح يكون كذا شكل السطر اﻻول في ملفنا
http://www.streetpatrol.ru/includes/
طيب نتذكر اننا نحتاج تكون النتيجة النهائية مثل كذا
www.streetpatrol.ru
طيب الخطوة الثانية وبإستخدام نفس اﻻداة راح يكون اﻻمر مثل كذا
cut -c 8- test2.txt > test3.txt
نشرح الخيارات :
c 8- = character معناها حرف . يعني بالعربي قص لي من الحرف الثامن الى اخر النص , علامة ” -” مثلا لو تكن موجودة بعد الـ”8” كان فقط قام بقص الحرف الثامن لي , وزي ماتشوفون انا اريد اتخلص من اول ثمان احرف اللي هي
” http://” واحتفظ بباقي السطر.
طبعاً السبب اننا كل مرة نطبع المخرجات الى ملف مختلف عشان نلاحظ كل امر وش نتائجه بالضبط .
اوكي وصل شكل النص في السطر الاول الى هذه المرحلة
www.streetpatrol.ru/includes
برضوا ! فيه زوائد احتاج اتخلص منها .. اذكر بالشكل اللي نحتاج نوصل له
www.streetpatrol.ru
حلو هنا راح نطبق نفس اﻻمر اللي طبقناه اول مرة .. يعني نفس المفهوم
cut -d / -f 1 test3 > test4
وكذا نكون انتهينا ووصلنا لنتيجتنا النهائية اللي هي
www.streetpatrol.ru
في الحقيقة مارح تستخدمه كذا , بحالتي استخدمتها داخل شيل سكربت و اضفت بعض اﻻوامر للترتيب والتخلص من التكرار
cut -d , -f 2 test.txt | cut -c 8- | cut -d / -f 1 | sort | uniq > result.txt
من وجهة نظري اعتقد تقدر تحصل على نفس النتائج بإستخدام الـ regular expression اللي هي امر grip بطريقة اسرع.
في النهاية ادوات معالجة النصوص استخداماتها جداً جداً غير محدودة .. وتعتمد بالنهاية عليك وعلى طريقة تسخيرها في مبتغاك !
اذا كان فيه نقطة غير واضحة .. ارجو الرد وسأوضحها بكل سرور ان شاء الله
للمزيد حول امر cut راجع هذا الرابط :
http://alturl.com/gjkr7