কীভাবে একটি নির্দিষ্ট কলামের বিষয়বস্তু 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.