awk অপ্রত্যাশিতভাবে স্ট্রিং থেকে বিন্দু সরান


9

আমি একটি .csvফাইলে একটি কলাম (দ্বিতীয় স্থান) যুক্ত করতে চাই এবং আমি column কলামটির মানগুলি স্ট্রিং হওয়া এবং উদ্ধৃত হওয়া চাই;

নিম্নলিখিত কমান্ডটি কলামটি যোগ করেছে কিন্তু উদ্ধৃতি ব্যতীত:

awk -F"," 'BEGIN { OFS = "," } {$2="2.4.0"; print}' test.csv > output.csv

নিম্নলিখিত পদ্ধতির উদ্ধৃতিগুলি অন্তর্ভুক্ত করে তবে কিছু কারণে এটি .মান থেকে শেষ (বিন্দু) সরিয়ে দেয়

awk -F"," 'BEGIN { OFS = "," } {$2="\""2.4.0"\""; print}' test.csv > output.csv

সুতরাং আমার মানগুলি "2.40" হিসাবে শেষ হয়।

আমি এই সম্পর্কে কিভাবে যেতে হবে?


আপনার ফাইলে যদি 2 বা তার বেশি কলাম থাকে তবে আপনি দ্বিতীয় কলামটি সন্নিবেশ করতে বা প্রতিস্থাপন করতে চান?
সিটিএসি_

প্রথম একটির পরে কেবল একটি কলাম
sertোকান

2
ঠিক আছে, তাই প্রবেশ করতে, আপনাকে অবশ্যই ব্যবহার করতে হবে: awk 'BEGIN {FS = OFS = ","} {$ 1 = $ 1 ", \" 2.4.0 \ ""} 1'
ctac_

1
বা awk '{sub (",", ", 2." 2.4.0 \ ",")} 1'
ctac_

উত্তর:


12

মনে হচ্ছে আপনার উদ্ধৃতিগুলি ভুল হয়েছে। আপনাকে নীচের মতো করতে হবে

awk -F"," 'BEGIN { OFS = "," } {$2="\"2.4.0\""; print}' test.csv > output.csv

এটি GNU awk man পৃষ্ঠাতে ব্যাখ্যা করা হয়েছে - 3.2 এস্কেপ সিকোয়েন্সস

কিছু অক্ষরকে আক্ষরিকভাবে স্ট্রিং ধ্রুবক ("foo")বা রিজেক্সপ কনস্ট্যান্টস ( /foo/) এ অন্তর্ভুক্ত করা যায় না। পরিবর্তে, এগুলিকে এস্কেপ সিকোয়েন্সগুলির সাথে উপস্থাপন করা উচিত, যা ব্যাকস্ল্যাশ ( \) দিয়ে শুরু হওয়া অক্ষর ক্রম । একটি পালানোর ক্রমের একটি ব্যবহার একটি স্ট্রিং ধ্রুবকটিতে ডাবল-কোট অক্ষর অন্তর্ভুক্ত করা হয়। যেহেতু একটি সরল ডাবল উদ্ধৃতি স্ট্রিংটি শেষ করে, আপনার অবশ্যই \"স্ট্রিংয়ের অংশ হিসাবে একটি আসল ডাবল-উদ্ধৃতি চরিত্র উপস্থাপন করতে ব্যবহার করবেন ..


আচরণের কারণটি আমি যতটা বুঝতে পেরেছি, awkমনে হয় 2.4.0আপনার ওপি থেকে অতিরিক্ত উদ্ধৃতি সহ একটি সংখ্যার শব্দ হিসাবে ব্যাখ্যা করা হয়েছে এবং প্রথম বিন্দুর পরে যথাযথতা হারাতে স্থির করেছে।

অর্থাত

$2="\""2.4.0"\""

ন্যায়বান হয়

$2=""2.4.0""

যা awkআর স্ট্রিং হিসাবে বোঝে না। আপনি সহজভাবে এই আচরণটি পুনরুত্পাদন করতে পারেন

awk 'BEGIN { print ""2.4.0"" }'
2.40

যা আপনি যখন ফলাফল হতে হবে

awk 'BEGIN { print 2.4.0 + 0 }'

1
@ রোয়াইমা: আমি যা জানি তা থেকে মনে হয় এটি কেবল বাতিল হয়ে গেছে এবং ফলস্বরূপ { print 2.4.0 }বা { print 2.4.0 + 0 }একটি অন-স্ট্রিং উপাদান হিসাবে এসেছে। আমি প্রাসঙ্গিক ডক্সগুলিও অনুসন্ধান করার চেষ্টা করেছি, কিন্তু পারি নি
Inian

2
আমি মাঝে মাঝে ব্যবহারযোগ্য সুবিধামত উদ্ধৃতি যুক্ত করার আরেকটি উপায় হ'ল ভেরিয়েবলের সংজ্ঞা দেওয়া, যেমন:awk -v q='"' '... print q "2.4.0" q ...
থোর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.