দুটি পৃথক ফাইল থেকে কলামগুলি মার্জ করা হচ্ছে


10

অ্যাজক ব্যবহার করে দুটি পৃথক ফাইল থেকে বেছে নেওয়া কলামগুলিকে মার্জ করে একটি নতুন ফাইল কীভাবে তৈরি করা যায়? দু'টি ফাইলের উপাদানগুলির অর্ডারটি গণ্ডগোল না করে।

উদাহরণ: ফাইল 3 এ ফাইল 1 থেকে কলাম 1,2,3 এবং ফাইল 2 থেকে কলাম 4 থাকতে পারে।

File 1
A   23  8   T
A   63  9   9
B   45  3   J

File 2
A   0
A   6   
B   5

File 3
A   23  8   0
A   63  9   6
B   45  3   5

উত্তর:


4

এটা চেষ্টা কর:

$ awk 'FNR==NR{a[FNR]=$2;next};{$NF=a[FNR]};1' file2 file1
A 23 8 0
A 63 9 6
B 45 3 5

ধন্যবাদ! pr -m -t -s\ File1.txt File2.txt | gawk '{print $1,$2,$3, $6}' > File3.txt
গাককে

2
@ ডোভ: আপনি ব্যবহার করতে পারেন paste file1 file2এবং তারপরে নির্বাচিত ক্ষেত্রগুলি মুদ্রণ করতে পারেন awk
কুওগলম

এই file2মেমোরিতে সঞ্চয় করে, যা ফাইলগুলি বড় হলে তা নিষিদ্ধ হতে পারে। মেমরির ওভারহেড ছাড়াই এটি করার সহজ উপায় রয়েছে (আমার উত্তর দেখুন)।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

17

যে জন্য ডেডিকেটেড টুল আছে: paste। এটি প্রথম ফাইল থেকে প্রতিটি ফাইলের সাথে দ্বিতীয় ফাইল থেকে সংশ্লিষ্ট লাইনটি সংযুক্ত করে; আপনি অযাচিত কলামগুলি এর আগে বা পরে অপসারণ করতে পারেন। উদাহরণস্বরূপ, ধরে নিলেন যে আপনার কলামগুলি ট্যাব-বিস্মৃত হয়েছে:

paste file1.txt file2.txt | cut -f 1,2,3,6

Ksh / bash / zsh প্রক্রিয়া বিকল্পের উপর নির্ভর করে উভয় ফাইলকে প্রাক-ফিল্টার করার একটি উপায় এখানে।

paste <(<file1.txt sed 's/[[:space:]][[:space:]]*[^[:space:]]*$//') \
      <(<file1.txt sed 's/^[^[:space:]]*[[:space:]][[:space:]]*//')

আওকটি প্রাথমিকভাবে একবারে একটি ফাইল প্রক্রিয়াকরণ করার জন্য প্রস্তুত, তবে আপনি getlineসমান্তরালে অন্য ফাইল থেকে পড়তে কল করতে পারেন।

awk '
  BEGIN {file2=ARGV[2]; ARGV[2]="";}
  {$0 = $0 ORS getline(); print $1, $2, $3, $6;}
' file1.txt file2.txt

এখন পর্যন্ত আমি ধরে নিয়েছি যে আপনি ফাইল 1 এর লাইন 1 সাথে ফাইল 2 এর লাইন 1, ফাইল 2 এর 2 লাইন 2 এর সাথে 2 ফাইলটি 2 এর লাইন 2 এর সাথে মিল করতে চান, যদি আপনি কোনও কলামের বিষয়বস্তু মেলাতে চান তবে এটি একটি সম্পূর্ণ ভিন্ন বিষয়। joinআপনি যে কলামটি মেলাতে চান তা বাছাই করা হয়েছে এমন কাজটি করবে।

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