كيف يمكنك تقسيم قاعدة الملف على رمز مميز؟
-
08-07-2019 - |
سؤال
دعنا نقول أنك حصلت على ملف يحتوي على نصوص (من 1 إلى N) مفصولة بـ $ كيف يمكن لقطعة الملف بحيث تكون النتيجة النهائية هي ملفات n؟
text1 مع الخطوط الجديدة $
النص 2 دولار الخ ...$
النصN
أفكر في شيء ما باستخدام awk أو sed ولكن هل هناك أي تطبيق يونكس متاح يقوم بالفعل بهذا النوع من المهام؟
المحلول
ربما split -p
نمط?
همم.قد لا يكون هذا بالضبط ما تريده.لا يقوم بتقسيم الخط، بل يبدأ ملفًا جديدًا فقط عندما يرى النمط.ويبدو أنه مدعوم فقط على الأنظمة المرتبطة بـ BSD.
يمكنك استخدام شيء مثل:
awk 'BEGIN {RS = "$"} { ... }'
يحرر: قد تجد بعض الإلهام ل { ... }
جزء هنا:
http://www.gnu.org/manual/gawk/html_node/Split-Program.html
يحرر: شكرا للتعليق من dmckee, لكن csplit
يبدو أيضًا أنه ينسخ السطر بأكمله الذي يحدث عليه النمط.
نصائح أخرى
وAWK "BEGIN {RS =" $ ". ORS = ""} {نص NUMBER ++؛ طباعة $ 0> "النص" نص NUMBER ".out"} 'اسم الملف
اقتباس فقرة>وشكرا لبيل Karwin لهذه الفكرة.
وتحرير: إضافة ORS = "" لتجنب طباعة سطر جديد في نهاية كل الملفات
.إذا أنا أقرأ هذا الحق، وUNIX قطع يمكن أن يكون الأمر تستخدم لهذا الغرض.
cut -d $ -f 1- filename
وأنا قد يكون بناء الجملة قليلا قبالة، ولكن ينبغي أن أقول قطعت الذي تستخدمه الحقول $ فصل وإعادة الحقول من 1 إلى النهاية.
وقد تحتاج إلى الهروب من $.
awk -vRS="$" '{ print $0 > "text"t++".out" }' ORS="" file
وباستخدام القيادة تقسيم يمكننا تقسيم باستخدام السلاسل.
ولكن القيادة csplit يسمح لك أن يشق ملفات مستندة على التعابير العادية أيضا.