سؤال

  • ما هو الفرق بين awk و sed ؟
  • ما هو نوع من التطبيق هي أفضل استخدام حالات sed و awk الأدوات ؟
هل كانت مفيدة؟

المحلول

sed هو تيار محرر.يعمل مع تيارات من الشخصيات لكل خط الأساس.وقد البدائية لغة البرمجة التي تشمل غوتو على غرار حلقات بسيطة الشرطية (بالإضافة إلى نمط مطابقة عنوان مطابقة).هناك أساسا اثنين فقط من "المتغيرات":نمط الفضاء عقد الفضاء.قراءة النصوص يمكن أن يكون صعبا.العمليات الحسابية للغاية حرج في أحسن الأحوال.

هناك إصدارات مختلفة من sed مع مستويات مختلفة من الدعم خيارات سطر الأوامر و ميزات اللغة.

awk نحو محدد المجالات على أساس الخط.وقد أكثر قوة البرمجة بما في ذلك بنيات if/else, while, do/while و for (ج الطراز و مجموعة التكرار).هناك الدعم الكامل للمتغيرات واحد-البعد صفائف النقابي بالإضافة إلى (المنظمة البحرية الدولية) kludgey متعددة الأبعاد المصفوفات.العمليات الحسابية تشبه تلك الموجودة في C.وقد printf والوظائف."ك" في "أوك" لتقف على "Kernighan" كما في "كيرنيغان و ريتشي" من كتاب "لغة البرمجة C" الشهرة (كي لا ننسى Aهو Weinberger).واحد يمكن تصور كتابة كاشف الانتحال الأكاديمي باستخدام awk.

جنو awk (gawk) لديها العديد من ملحقات ، بما في ذلك صحيح المصفوفات متعددة الأبعاد في النسخة الأخيرة.هناك نماذج أخرى من awk بما في ذلك mawk و nawk.

كلا البرنامجين استخدام التعبيرات العادية لاختيار وتجهيز النص.

أنا أميل إلى استخدام sed حيث توجد أنماط في النص.على سبيل المثال ، يمكنك استبدال جميع الأرقام السالبة في بعض النصوص التي هي في شكل "ناقص علامة تليها سلسلة من الأرقام" (مثلا ، "-231.45") مع "المحاسب بين قوسين" شكل (مثلا ، "(231.45)") باستخدام هذا (الذي لديه مجال للتحسين):

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

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

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

بالطبع هذه مجرد أمثلة بسيطة جدا لا توضح مجموعة كاملة من القدرات التي يجب أن تقدم.

نصائح أخرى

1) ما هو الفرق بين awk و sed ؟

على حد سواء هي الأدوات التي تحول النص.ولكن awk يمكن أن تفعل المزيد من الأشياء بالإضافة إلى التعامل مع النص.في لغة البرمجة نفسها مع معظم الأشياء التي تعلم في البرمجة مثل المصفوفات, الحلقات, إذا/آخر التحكم في التدفق الخ يمكنك "البرنامج" في sed كذلك ، ولكن لن ترغب في الحفاظ على قانون مكتوب.

2) ما هو نوع من التطبيق هي أفضل حالات الاستخدام sed و awk الأدوات ؟

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

كل أدوات تهدف إلى العمل مع النص و هناك مهام كل الأدوات التي يمكن أن تستخدم.

بالنسبة لي سيادة للفصل بينهما هو:استخدام sed لأتمتة المهام يمكنك أن تفعل ذلك في محرر النص يدويا.هذا هو السبب في أنه يسمى تيار محرر.(يمكنك استخدام نفس الأوامر إلى تحرير النص في همة).استخدام awk إذا كنت ترغب في تحليل النص ، بمعنى عد الحقول ، وحساب المجاميع استخراج وإعادة تنظيم الهياكل الخ.

أيضا يجب أن لا ننسى grep.استخدام grep إذا كنت ترغب فقط في البحث/استخراج شيء في النص (ملف)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top