سؤال

دعنا نقول أنك حصلت على ملف يحتوي على نصوص (من 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 يسمح لك أن يشق ملفات مستندة على التعابير العادية أيضا.

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