سؤال

لمعالجة مجموعة من البيانات وسهولة الحصول عليها جاهزة لإدراجها في قاعدة البيانات الخاصة بنا، فإننا توليد مجموعة من البرامج النصية قذيفة. كل واحد منهم لديه حوالي 15 خطوط، واحد لكل جدول البيانات هو ذاهب. واحد دفعة استيراد الأخيرة، فشل بعض الملفات استيراد الخوض في جدول واحد بعينه. لذا، لدي مجموعة من النصوص قذيفة (حوالي 600) حيث كنت بحاجة إلى التعليق الخروج الأسطر 7 الأولى، ثم إعادة تشغيل الملف. وهناك حوالي 6000 قذيفة النصوص في هذا المجلد، وشيئا عن ملف معين يمكن أن تقول لي إذا كان يحتاج للتحرير. لقد حصلت على قائمة من الملفات التي سحبت من إخراج قاعدة البيانات.

ولكن كيف يمكنني كتابة السيناريو باش (أو أي شيء آخر من شأنه أن تعمل على نحو أفضل) لاتخاذ هذه القائمة من أسماء الملفات ولكل منهم، التعليق الخروج خطوط 7 الأولى، وتشغيل البرنامج النصي؟

وتحرير:

#!/usr/bin/env sh

cmd1
cmd2
cmd3
cmd4
cmd5
cmd6
cmd7
cmd8

ولست متأكدا كيف يمكن قراءتها وهذا هو. في الأساس، وخطوط 7 الأولى (دون احتساب السطر الأول) الحاجة إلى وجود # تضاف إلى بداية منهم. ملاحظة: لقد تم تحرير الملفات لجعل كل سطر أقصر وقطع جزئيا خارج نسخ من VIM. ولكن في الجزء الرئيسي من كل ملف، هناك خط بدءا من الصدى، ثم خط بدءا sqlldr

هل كانت مفيدة؟

المحلول

وعن طريق الحوار الاقتصادي الاستراتيجي، يمكنك تحديد نطاق رقم السطر في ملف إلى تغيير.

#!/bin/bash

while read line
do
    # add a comment to beginning of lines 1 - 7 and rename the script
    sed '3,9 s/^/#/' $line > $line.new
    exec $line.new
done < "filelist.txt"

وقد ترغب في اختبار هذا قبل تشغيله على كل من تلك النصوص ...

وتحرير: تغيير أرقام خطوط لتعكس التعليقات

نصائح أخرى

وتحدث تقريبا:

#!/bin/sh
for file in "$@"
do
    out=/tmp/$file.$$
    sed '2,8s/^/#/' < $file > $out
    $SHELL $out
    rm -f $out
done

وعلى افتراض انك لا تبالي التحقق من شروط السباق وغيرها.

ويبدو جعلت السابقين على ما تريد القيام به.

وعلى سبيل المثال، لتحرير ملف واحد، مع هنا وثيقة:

#!/bin/sh

ex test.txt << END
1,12s/^/#/
wq
END

وهذا سوف التعليق الخروج خطوط 12 الأولى في "TEST.TXT". على سبيل المثال الخاص بك يمكنك أن تحاول "$FILE" أو ما شابه ذلك (بما في ذلك علامات الاقتباس!).

وثم تشغيلها بالطريقة المعتادة، أي ./"$FILE"

وتحرير: $SHELL "$FILE" من المحتمل ان يكون طريقة أفضل لتشغيلها (من واحد من المعلقين أعلاه)

.

وأخيرا كنت تريد الذهاب الى استخدام الأمر لينكس الحوار الاقتصادي الاستراتيجي. أيا كان المنطق تحتاج إلى وضع في البرنامج النصي، كما تعلمون. لكن السيناريو الخاص بك سوف تدعو في نهاية المطاف سد. http://lowfatlinux.com/linux-sed.html

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