ফাইলের বিষয়বস্তুগুলি যদি এতে সম্পর্কিত লাইন নম্বর থাকে তবে প্রদর্শন করুন


1

নিম্নলিখিত ফর্ম্যাটে আমার কাছে দুটি ফাইল রয়েছে:

File A
4
5
8
9

File B
1 text
2 text1
3 text2
4 text3
5 text4
6 text5
7 text6
8 text7
9 text8

আমার আউটপুটটির জন্য আমি যা পেতে চাই তা হ'ল নিম্নলিখিত (ফাইল বি এর দ্বিতীয় ক্ষেত্র যদি এটি ফাইল এ এর ​​লাইন সংখ্যার সাথে মিলে যায়):

test3
test4
text7
text8

উত্তর:


1

আপনি একটি সহজ তৈরি করতে পারেন sedসংযোজন করে ফাইলটি একটি থেকে স্ক্রিপ্ট p, প্রতিটি লাইন তারপর অন্য স্ক্রিপ্টটি রান sedদিয়ে -nঅন্যান্য লাইনের প্রিন্ট করতে না। তদুপরি, উত্পন্ন স্ক্রিপ্ট সংরক্ষণ করার দরকার নেই, আপনি এটির মধ্যে পাইপ করতে পারেন sed:

sed 's/$/p/' A | sed -nf- B

আমার নতুনত্বকে ক্ষমা করুন, তবে কেন আমরা 'পি' ব্যবহার করছি এবং আপনি কী ব্যাখ্যা করতে পারবেন যে দ্বিতীয় সেড স্টেটমেন্টটি কী করছে?
ব্যবহারকারী3299633

p"মুদ্রণ" এর অর্থ। -nএর অর্থ "না বলা পর্যন্ত মুদ্রণ করবেন না"। -f-এর অর্থ "স্ট্যান্ডার্ড ইনপুট থেকে স্ক্রিপ্টটি পড়ুন"।
চোরোবা

এটি কীভাবে মুদ্রণ করতে জানে? প্রথম ক্ষেত্রটি উভয় ফাইলে একই হলে এটি ডিফল্ট হিসাবে দেখায়?
ব্যবহারকারী3299633

@ ব্যবহারকারী3299633: না, এর আগে একটি সংখ্যা pলাইন নম্বরটির জন্য দাঁড়িয়ে।
চোরোবা

1
$ awk 'FNR==NR{seen[$1];next;} FNR in seen' FileA FileB
text3
text4
text7
text8

কিভাবে এটা কাজ করে

  • FNR==NR{seen[$1];next;}

    প্রথম ফাইলটি পড়ার সময়, এটি সংখ্যাসূচক অ্যারেতে প্রতিটি সংখ্যাকে কী হিসাবে যুক্ত করে seen

    এফএনআর হ'ল বর্তমান ফাইলের লাইন নম্বর এবং এনআর হ'ল পঠিত সমস্ত লাইনের মধ্যে লাইন নম্বর। সুতরাং যখন FNR==NR, তখন আমরা এখনও প্রথম ফাইলটি পড়ছি FileAএই ক্ষেত্রে। মান সহ seen[$1]একটি কী তৈরি করে । বাকী আদেশটি বাকি কমান্ডগুলি এড়িয়ে চলুন এবং পরবর্তী লাইনে শুরু করতে বলুন।seen$1next

  • FNR in seen

    দ্বিতীয় ফাইলটি পড়ার সময়, কোনও লাইন প্রিন্ট করে যদি এর লাইন নম্বরটি থাকে seen

    FNR in seenএকটি শর্ত এটি সত্য করে যদি মূল্যায়ন করে যদি লাইন নম্বর এফএনআর অ্যারেতে একটি কী হয় seen। যেহেতু আমরা এই শর্তটির জন্য কোনও পদক্ষেপ নির্দিষ্ট করে নেই, তাই লাইনটি প্রিন্ট করার জন্য ডিফল্ট ক্রিয়া নেওয়া হয়।


1

আপনি একটি সম্পর্কিত "যোগদান" অপারেশন করছেন, সুতরাং মানক ইউনিক্স joinকমান্ডটি ব্যবহার করুন :

$ join fileA.txt fileB.txt
4 text3
5 text4
8 text7
9 text8

দ্বিতীয় ফাইলটি থেকে কেবল দ্বিতীয় ক্ষেত্রটি পেতে, যুক্ত করুন -o 2.2:

$ join -o 2.2 fileA.txt fileB.txt
text3
text4
text7
text8

এটি কাজ করার জন্য দুটি ফাইলই যোগ দেওয়ার ক্ষেত্রে (এই উদাহরণের প্রথম কলাম) বাছাই করা দরকার।

চিয়ার্স!

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