আমি কীভাবে একটি নির্দিষ্ট ডিরেক্টরিতে একাধিক স্বতন্ত্র ফাইলগুলিতে awk এর আউটপুট নির্দেশ করতে পারি


0

একটি নির্দিষ্ট ডিরেক্টরিতে পৃথক ফাইলগুলিতে awk আউটপুটটি পরিচালনা করতে আমার সমস্যা হচ্ছে। আমি কাজটি ডিরেক্টরিতে সফলভাবে এটির পাশাপাশি শেষ পর্যন্ত একটি এমভি কমান্ডের শৃঙ্খলাবদ্ধ করতে পারি, তবে আমি কেবলমাত্র awkনির্দিষ্ট ডিরেক্টরিতে ফাইলগুলি সংরক্ষণ করতে ব্যবহার করতে সক্ষম হতে চাই ।

রেফারেন্সের জন্য, এখানে একটি সরলীকৃত messages.txtযা আমি পৃথক বার্তা ফাইলে বিভক্ত করতে চাই:

messageHeader:
  mh_field1: mh_val1
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2

messageHeader:
  mh_field1: mh_val1
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2

messageHeader:
  mh_field1: mh_val1
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2

আমি বার্তাগুলি ফাইলটিকে সাফল্যের সাথে পৃথক বার্তায় বিভক্ত করতে সক্ষম হয়েছি এবং প্রতিটিটিকে ওয়ার্কিং ডিরেক্টরিতে আলাদা ডিরেক্টরিতে আউটপুট করে এটি ব্যবহার করে:

awk -v RS= '{print > ("message" NR ".txt")}'

যা তৈরি করে message1.txt, message2.txtএবং message3.txtকার্যক্ষম ডিরেক্টরিতে। mvআউটপুটকে একটি নির্দিষ্ট ডিরেক্টরিতে স্থানান্তর করতে আমি এই বুনিয়াদি কমান্ডের শেষে একটি কমান্ডও শৃঙ্খল করতে পারি :

out = "$(pwd)/messages"
mkdir -p $out
awk -v RS= '{print > ("message" NR ".txt")}' && mv message*.txt $out

যা সৃষ্টি করে message1.txt, message2.txtএবং message3.txtভিতরে ./messages। যাইহোক, আমি কিভাবে শুধুমাত্র ব্যবহার করে একটি নির্দিষ্ট ডিরেক্টরিতে পৃথক বার্তা ফাইলগুলি সংরক্ষণ করতে চিন্তা করার সক্ষম হয়েছে না awk

উদাহরণস্বরূপ, আমি বার্তা ফাইল এবং পৃথক বার্তাগুলিকে একটি নির্দিষ্ট আউটপুট ডিরেক্টরিতে আউটপুট করার চেষ্টা করেছি:

out="$(pwd)/messages"
mkdir -p $out
awk -v RS= '{print > ($out "message" NR ".txt")}' messages.txt

নিম্নলিখিত ত্রুটির ফলাফল যা:

awk: cmd. line:1: (FILENAME=- FNR=1) fatal: can't redirect to 'messageHeader:
  mh_field1: mh_val1 
  mh_field2: mh_val2
messageData:
  md_field1: md_val1
  md_field2: md_val2message1.txt' (file name too long)

আমি নিম্নলিখিত সম্পর্কিত প্রশ্নটি পেয়েছি " awk ব্যবহার করে ফাইলগুলি বিভক্ত করুন এবং অন্য ডিরেক্টরিতে ফলাফল উত্পন্ন করুন " তবে এখনও সঠিক বাক্যবিন্যাস পেতে সক্ষম হননি।

out="$(pwd)/messages"
mkdir -p $out
awk -v RS= path=$out '{f=path "message" NR ".txt"; print > f}' messages.txt 

awk: fatal: cannot open file `{f=path "message" NR ".txt"; print > f}' for reading (No such file or directory)

1
আপনি কেবলমাত্র -vআমার মনে করছেন ...awk -v RS= -v path="$out"
স্টিল্ড্রাইভার

আপনি কি সত্যিই টাইপ করেছেন out = "$(pwd)/messages"? এটি আপনাকে একটি ত্রুটি বার্তা দিয়েছে?
স্কট

@ স্টিল্ড্রাইভার ধন্যবাদ, এটাই ছিল, আমি এর -vআগে মিস করছি path=$out
cneiderer

@ স্কট দুঃখিত, প্রশ্ন লেখার ক্ষেত্রে এটি ত্রুটি ছিল। আমি প্রাথমিকভাবে outসেই কোড ব্লকটিতে সংজ্ঞায়িত ছিলাম না এবং তৈরি এবং ত্রুটিটি যখন আমি সম্পূর্ণরূপে এটি যুক্ত করার চেষ্টা করছিলাম।
cneiderer

উত্তর:


0

প্রতি @ স্টিল্ড্রাইভারের মন্তব্যে, একটি অনুপস্থিত ছিল -v, সঠিক বাক্য গঠন করে:

out="$(pwd)/messages"
mkdir -p $out
awk -v RS= -v path="$out" '{f=path "message" NR ".txt"; print > f}' messages.txt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.