غير قادر على فصل الرموز في ملف واحد إلى العديد من الملفات في AWK/Python
سؤال
أحتاج إلى وضع رموز مختلفة في ملف واحد للعديد من الملفات.تتم مشاركة الملف بشكل واضح بواسطة منشئي AWK على صفحتهم الرئيسية.الملف هو أيضا هنا لسهولة الاستخدام.
محاولتي لهذه المشكلة
يمكنني الحصول على الخطوط التي يحدد موقع كل رمز بها
awk '{ print $1 }'
ومع ذلك، أنا لا أعرف كيف
- للحصول على أرقام الأسطر الدقيقة حتى أتمكن من استخدامها
- لتجميع الرموز بين السطور المحددة بحيث يتم تجاهل الكلمة الأولى من كل سطر
- لوضع هذه الرموز المنفصلة في ملفات جديدة يتم تسميتها بالكلمة الأولى في السطر
أنا متأكد من أنه يمكن حل المشكلة بواسطة AWK وباستخدام Python أيضًا.ربما نحتاج إلى استخدامها معًا.
[يحرر] بعد الجواب الأول
أحصل على الخطأ التالي عندما أحاول تنفيذه باستخدام awk
$awk awkcode.txt
awk: syntax error at source line 1
context is
>>> awkcode <<< .txt
awk: bailing out at source line 1
المحلول
هل حاولت:
- قم بإنشاء ملف unbundle.awk بالمحتوى التالي:
$1 != السابق { Close(prev);PRIME = $ 1} {print substr ($ 0 ، index ($ 0 ، "") + 1)> $ 1}
قم بإزالة الأسطر التالية من الملف awkcode.txt:
# unbundle - فك حزمة في ملفات منفصلة
$1 != السابق { Close(prev);PRIME = $ 1} {print substr ($ 0 ، index ($ 0 ، "") + 1)> $ 1}
- قم بتشغيل الأمر التالي:
awk -f unbundle.awk awkcode.txt
نصائح أخرى
هل تحاول فك ضغط ملف بهذا التنسيق؟إنه نوع من أرشيف الصدفة.لمزيد من المعلومات، راجع http://en.wikipedia.org/wiki/Shar
إذا قمت بتنفيذ هذا البرنامج باستخدام awk، فسيقوم awk بإنشاء كل تلك الملفات.لا تحتاج إلى الكتابة أو إعادة الكتابة كثيرًا.يمكنك ببساطة تشغيل برنامج awk، وسيظل يعمل.
أولاً، قم بعرض الملف بتنسيق "عادي". http://dpaste.com/12282/plain/
ثانيًا، احفظ النسخة العادية من الملف باسم "awkcode.shar"
ثالثا، أعتقد أنك بحاجة إلى استخدام الأمر التالي.
awk -f awkcode.shar
إذا كنت تريد استبداله ببرنامج بايثون، فسيكون شيء من هذا القبيل.
import urllib2, sys
data= urllib2.urlopen( "http://dpaste.com/12282/plain/" )
currName, currFile = None, sys.stdout
for line in data:
fileName, _, text= line.strip().partition(' ')
if fileName == currName:
currFile.write(line+"\n")
else:
if currFile is not None:
currFile.close()
currName= fileName
currFile= open( currName, "w" )
if currFile is not None:
currFile.close()
يجب ألا يحتوي ملف awk awkcode.txt على أي سطر فارغ.في حالة مواجهة أي سطر فارغ، يفشل برنامج awk.لا يوجد فحص للأخطاء لتصفية السطر الفارغ في الكود.هذا ما تمكنت من اكتشافه بعد عدة أيام من النضال.