খালি ডিসপ্লেতে ফাঁকা লাইন সরান


10

আমি এই প্রশ্নের সমাধান বের করার চেষ্টা করছিলাম । আমি awkসমাধানের জন্য ব্যবহার করতে চেয়েছিলাম ।

আমার ইনপুট ফাইলটি নীচের মতো।

-bash-3.2$ cat file
ramesh
ramesh_venkat
ramesh3_venkat3
ramesh4
ramesh5
venkat
venkat3
venkat4

আমি নীচের মত awkদ্বিতীয় মান বের করতে কমান্ড ব্যবহার করেছি _

awk -F "_" '{print $2}' file

তবে উপরের কমান্ডটি সঠিক মানগুলি মুদ্রণ করলেও আমি আমার আউটপুটে ফাঁকা লাইন পাচ্ছি। আমার 2 টি প্রশ্ন আছে।

প্রশ্ন 1

আমি আউটপুটে ফাঁকা লাইনগুলি কীভাবে সরিয়ে ফেলব যাতে আমি কেবল venkatএবং venkat3আউটপুটে পাই ?

যদি আমি ব্যবহার printfপরিবর্তে printআমার মধ্যে awk, আমি পেতে venkatvenkat3আউটপুট হয় যা আমি অর্জন করতে চেয়েছিলেন না। আমি যেমন আউটপুট চাই,

venkat
venkat3

প্রশ্ন 2

এই মানগুলিকে একটি সহযোগী অ্যারে বা অন্য কিছু হিসাবে ব্যবহার করে, মানগুলি $1কলামে আসলে ঘটে যায় তা আমি কীভাবে খুঁজে পাব?

আমি কিছু অর্জন করতে চেয়েছিলাম,

awk -F "_" '$2==1{print $1}' file

সম্পাদনা

awkস্টিফেনের সমাধান আমি খেয়াল করিনি । আমি উল্লেখ করেছি যে এটি কি একই কাজ করছে?


1
স্টিফেনরা awkএকই কাজ করছে না। আপনার দৃষ্টিভঙ্গি ধরে নিয়েছে যে কোনও শব্দটি কেবল আলাদা করে থাকলে কেবল অন্যটিতে থাকতে পারে _। ওপি'র উদাহরণের ক্ষেত্রে এটি সত্য হলেও, পোস্ট করা সমস্ত উত্তরই doglionকেবল এবং না-এর মতো মামলাগুলিতেও ডিল করে dog_lion
টেরডন

উত্তর:


8

প্রশ্ন 1

$ awk -F _ 'NF > 1 {print $2}' file
venkat
venkat3

Question2

$ awk -F _ '
    NR == FNR {a[$1];next}
    ($2 in a) {print $2}
' file file
venkat
venkat3

আমাকে প্রদর্শন করতে হবে venkatএবং venkat3ওপি অনুসারে অন্য প্রশ্নে জিজ্ঞাসা করা হয়েছে। আমি চেষ্টা করছি যে এর পরে কীটি _আমার $1কলামে উপস্থিত আছে কিনা ।
রমেশ

ওহ, আমি আমার উত্তর আপডেট করেছি!
cuonglm

সুন্দর সমাধান। আমি মনে করি আপনার অন্য প্রশ্নের সমাধানে আপনার
রমেশ

8

প্রশ্ন 1 এর জন্য, আপনি --only-delimited( -s) বিকল্পটি ব্যবহার করতে পারেনcut

cut -s -f2 -d'_' file
venkat
venkat3

8

অন্য পদ্ধতি:

প্রশ্ন 1

awk -F_ '$2{print $2}' file

এটি কেবল $2সংজ্ঞায়িত হলে মুদ্রণ হবে । এটি লেখার একটি ছোট উপায়:

awk -F_ '{if($2){print $2}}' file

প্রশ্ন 2

ইতিমধ্যে সম্বোধন করা হয়নি এমন কিছু যুক্ত করার দরকার নেই।


1
প্রশ্নোত্তর জন্য ভাল সমাধান। সংক্ষিপ্ত এবং খাস্তা :)
রমেশ

6

প্রশ্ন 1

awk -F "_" '/_/ {print $2}' file

প্রশ্ন 2

awk -F "_" '{values[$1]=1;}; END {for (val in values) print val;}' file

সুন্দর সমাধান। আমি এটি পছন্দ করি :)
রমেশ

প্রশ্নাবলীর জন্য, আমি তাদের উপস্থিত হিসাবে কেবল venkatএবং venkat3আউটপুট হিসাবে পেতে চাই $1। তবে আমি $1আপনার আদেশ অনুসারে সমস্ত মান পেয়েছি get
রমেশ

@ রমেশ: আপনার বিবরণ হিসাবে, আমি মনে করি আপনি প্রথম কলামে $2যে প্রবেশ করেছে তা পেতে চান $2। এটা কী ঠিক?
cuonglm

@ জ্ঞাক, হ্যাঁ আপনি ঠিক বলেছেন।
রমেশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.