কীভাবে একটি নির্দিষ্ট কলামের বিষয়বস্তু awk দিয়ে প্রতিস্থাপন করবেন?


31

প্রদত্ত: একটি রেকর্ডে 40 টি কলাম রয়েছে। আমি 35 তম কলামটি প্রতিস্থাপন করতে চাই যাতে 35 তম কলামটি 35 তম কলামের সামগ্রী এবং "" $ "চিহ্নের সাথে প্রতিস্থাপিত হবে। যা মনে এলো তা হ'ল:

awk '{print $1" "$2" "...$35"$ "$36...$40}'

এটি কাজ করে তবে কারণ কলামের সংখ্যা 10 কে হিসাবে বড় হলে এটি অনিবার্য। এটি করার জন্য আমার আরও ভাল উপায় দরকার।

উত্তর:



8

এটি করার জন্য আরও কার্যকর উপায় রয়েছে are সেই সতর্কতার সাথে:

awk '{$35 = $35"$"; print}' infile > outfile

3

যদি ক্ষেত্রের সীমানা থাকে <space>:

sed 's/  */$&/35'

যদি ক্ষেত্রের ডিলিমিটারটি অজানা:sed 's/./$&/35'
— আন্ডারওভার করুন

@ উল্টো - আমি মনে করি না যে এটি একই জিনিস। এটি কোনও ইনপুট লাইনে ডাব্লু / চারটিতে 35 তম চরটি উপসর্গ করা উচিত $- সীমিত বা না। উপরের জিনিসটির চার্চের সাথে 35 ম ক্ষেত্রের - চরিত্রের সাথে $- - প্রতিটি ক্ষেত্রের অক্ষর নির্বিশেষে কোনও ব্যাপার নয়, উপরের জিনিসটির যে কোনও সংখ্যক সীমান্ত বর্ণের 35 তম ঘটনাকে সংযুক্ত করা উচিত।
— মাইকজার্ভ

আহ, "একটি রেকর্ডে 40 টি কলাম"। আমি '35 তম কলাম' আক্ষরিক হিসাবে 'পাঠ্য ফাইলের 35 তম অক্ষর কলাম' পড়েছি।
— আন্ডারওভার করুন

3

আসল ফিল্ড-সেপেটর সংরক্ষণ করার জন্য, আমি এটি করেছি। আমি যে কলামটি ফাঁকা করে রাখতে চেয়েছিলাম সেটি ছিল 12 ডলার।

awk -F"\t" '{OFS=FS}{ $12="" ; print   }' infile.txt > outfile.txt

সঙ্গে gawk -i, আপনি এটি থাকে, আপনি জায়গায় ফাইল সম্পাদনা করতে পারেন।


1

"অনুমোদিত" উত্তরগুলি ব্যবহার করতে সমস্যা থাকলে এটি ফাইলের প্রথম কলামের চেয়ে বেশি প্রতিস্থাপন করবে। আমি এই জেনেরিক কমান্ডটি ব্যবহার করি:

awk '$[column]="[replace]"' FS=, OFS=, inputfile > outputfile

কোথায়:

  • [column] = কলাম আপনি 1 দিয়ে শুরু করতে চান (0 নয়)
  • [replace] = পাঠ্য আপনি প্রতিস্থাপন করতে চান

awk '$1=mktime($1)' FS=, OFS=, oldfile > newfile ... কয়েক মিলিয়ন মিলিয়ন টাইমস্ট্যাম্প প্রতিস্থাপন !! :)
— রোব্লগিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.