غير قادر على فصل الرموز في ملف واحد إلى العديد من الملفات في AWK/Python

StackOverflow https://stackoverflow.com/questions/632958

  •  08-07-2019
  •  | 
  •  

سؤال

أحتاج إلى وضع رموز مختلفة في ملف واحد للعديد من الملفات.تتم مشاركة الملف بشكل واضح بواسطة منشئي AWK على صفحتهم الرئيسية.الملف هو أيضا هنا لسهولة الاستخدام.

محاولتي لهذه المشكلة

يمكنني الحصول على الخطوط التي يحدد موقع كل رمز بها

awk '{ print $1 }'

ومع ذلك، أنا لا أعرف كيف

  1. للحصول على أرقام الأسطر الدقيقة حتى أتمكن من استخدامها
  2. لتجميع الرموز بين السطور المحددة بحيث يتم تجاهل الكلمة الأولى من كل سطر
  3. لوضع هذه الرموز المنفصلة في ملفات جديدة يتم تسميتها بالكلمة الأولى في السطر

أنا متأكد من أنه يمكن حل المشكلة بواسطة AWK وباستخدام Python أيضًا.ربما نحتاج إلى استخدامها معًا.

[يحرر] بعد الجواب الأول

أحصل على الخطأ التالي عندما أحاول تنفيذه باستخدام awk

$awk awkcode.txt 
awk: syntax error at source line 1
 context is
     >>> awkcode <<< .txt
awk: bailing out at source line 1
هل كانت مفيدة؟

المحلول

هل حاولت:

  1. قم بإنشاء ملف unbundle.awk بالمحتوى التالي:

$1 != السابق { Close(prev);PRIME = $ 1} {print substr ($ 0 ، index ($ 0 ، "") + 1)> $ 1}

  1. قم بإزالة الأسطر التالية من الملف awkcode.txt:

    # unbundle - فك حزمة في ملفات منفصلة

$1 != السابق { Close(prev);PRIME = $ 1} {print substr ($ 0 ، index ($ 0 ، "") + 1)> $ 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.لا يوجد فحص للأخطاء لتصفية السطر الفارغ في الكود.هذا ما تمكنت من اكتشافه بعد عدة أيام من النضال.

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