দুই বা ততোধিক ফাইলের লাইনটি ইন্টারলিভ করবেন কীভাবে?


10

আমি একক ফাইলে 2 টি ফাইল আউটপুট পাওয়ার চেষ্টা করেছি। কমান্ডের নীচে চেষ্টা করেছি:

cat file1 file2

কিন্তু এখানে file2ডেটা যুক্ত হয় file1

আমার যা দরকার তা হ'ল file1প্রথম লাইন file2এবং file1তারপরে file2দ্বিতীয় লাইন দ্বিতীয় লাইন ইত্যাদি etc.

কেউ কি আমাকে বলতে পারেন কীভাবে এটি একটি সহজ উপায়ে করা যায়?

উত্তর:


17

তার জন্য একটি অ্যাপ্লিকেশন আছে!

$ cat file1
file1 line1
file1 line2

$ cat file2
file2 line1
file2 line2

এখন, আপনি যদি এই ফাইলগুলিকে যুক্তি হিসাবে পাস করেন paste:

$ paste -d' ' file1 file2
file1 line1 file2 line1
file1 line2 file2 line2

যদি "ফাইল 1 ম লাইন এর পরে ফাইল 2 প্রথম লাইন এবং ফাইল 1 দ্বিতীয় লাইন এর পরে ফাইল 2 দ্বিতীয় লাইন ইত্যাদি", আপনি বোঝাতে চেয়েছেন যে আপনি প্রতিটি লাইন পেস্টের মধ্যে একটি নতুন লাইন চান, কেবল -d(ডিলিমিটার) বিকল্পটি সামঞ্জস্য করুন ।

$ paste -d'\n' file1 file2
file1 line1
file2 line1
file1 line2
file2 line2

2

পজিক আওক; এটি একটি স্বেচ্ছাসেবী ফাইলের সাথে কাজ করে এবং ফাইলগুলিতে এমনকি একই পরিমাণে লাইন থাকতে হয় না। সমস্ত ফাইল লাইন শেষ না হওয়া পর্যন্ত স্ক্রিপ্টটি চলতে থাকবে:

BEGIN {
  do {
    br = ch = 0
    while (++ch < ARGC)
      if (getline < ARGV[ch]) {
        printf ch < ARGC - 1 ? $0 FS : $0 RS
        br = 1
      }
  } while (br)
}

এটির সাথে একটি সমস্যা রয়েছে, যদি ইনপুটটিতে '%' অক্ষর থাকে তবে সেগুলি প্রিন্টফের ভিতরে এগুলি আবিষ্কার করার চেষ্টা করেছিল। আমার আপডেটটি হবে (আমি নিশ্চিত যে এটি পুরোপুরি সঠিক):printf "%s", ((ch < ARGC - 1) ? $0 FS : $0 RS)
স্কেলা উইলিয়াম

0

দ্রুত বাশ সমাধান

# Takes as many file arguments as needed
function InterleaveFiles {

    local counter=0
    local hasLine=true

    while [ $hasLine == true ]; do
            hasLine=false
            for i in "$@"; do
                    line=$(awk 'NR == num_line {print; exit}' num_line=$((counter+1)) "$i")
                    if [ -n "$line" ]; then
                            echo "$line"
                    hasLine=true
                    fi
            done
            counter=$((counter+1))
    done
}

InterleaveFiles file1 file2 file3 file4


-2
paste -d '\n' file1 file2 > file3

ইনপুট ফাইলগুলি কোথায় file1এবং file2সেগুলি file3তৈরি আউটপুট হবে।


1
ইউ অ্যান্ড এল স্ট্যাক এক্সচেঞ্জে স্বাগতম! এই উত্তরটি টেরডনের উত্তরের প্রায় অনুরূপ । আপনি যদি মনে করেন যে কোনও উত্তরে আপনি উন্নতি করতে পারেন তবে যথেষ্ট পরিমাণে নতুন তথ্য সরবরাহ করবেন না, দয়া করে বিদ্যমান উত্তরে একটি সম্পাদনার প্রস্তাব দেওয়ার কথা বিবেচনা করুন । উত্তরগুলি ভোটদানের উপর ভিত্তি করেও পুনরায় সাজানো হয়, সুতরাং প্রতিটি উত্তর তার নিজের হয়ে দাঁড়াতে হবে বা অন্য উত্তরগুলি উল্লেখ করা উচিত। সে কারণেই শেল অনেলাইনারদের একটি বিবরণ দেওয়া উচিত যা তাদের ক্রিয়াকলাপটি ব্যাখ্যা করে।
থমাস নাইম্যান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.