বিড়াল ফাইল 1
foo
ice
two
বিড়াল ফাইল 2
bar
cream
hundred
পছন্দসই আউটপুট:
foobar
icecream
twohundred
ফাইল 1 এবং ফাইল 2 এর ক্ষেত্রে আমার দৃশ্যে সর্বদা একই পরিমাণের লাইন থাকবে, যদি বিষয়গুলি সহজ করে তোলে।
বিড়াল ফাইল 1
foo
ice
two
বিড়াল ফাইল 2
bar
cream
hundred
পছন্দসই আউটপুট:
foobar
icecream
twohundred
ফাইল 1 এবং ফাইল 2 এর ক্ষেত্রে আমার দৃশ্যে সর্বদা একই পরিমাণের লাইন থাকবে, যদি বিষয়গুলি সহজ করে তোলে।
উত্তর:
সম্ভবত এই কাজের জন্য সঠিক সরঞ্জাম paste
paste -d '' file1 file2
দেখুন man paste
বিস্তারিত জানার জন্য।
আপনি pr
কমান্ডটি ব্যবহার করতে পারেন :
pr -TmJS"" file1 file2
কোথায়
-T
পৃষ্ঠাগুলি বন্ধ করে দেয়-mJ
মি আরজি ফাইলস, জে অয়েলিং সম্পূর্ণ লাইন-S""
খালি স্ট্রিং দিয়ে কলামগুলি পৃথক করুন আপনি যদি সত্যিই খাঁটি বাশ শেল ব্যবহার করে এটি করতে চেয়েছিলেন (প্রস্তাবিত নয়) তবে আমি এটিই পরামর্শ দেব:
while IFS= read -u3 -r a && IFS= read -u4 -r b; do
printf '%s%s\n' "$a" "$b"
done 3<file1 4<file2
(কেবলমাত্র এটি অন্তর্ভুক্ত করার কারণে বিষয়টি অন্য প্রস্তাবিত খাঁটি-বাশ সমাধানের মন্তব্যে এসেছিল))
অজানা উপায় মাধ্যমে :
awk '{getline x<"file2"; print $0x}' file1
getline x<"file2"
ফাইল 2 থেকে পুরো লাইনটি পড়ে এবং এক্স ভেরিয়েবলের মধ্যে রয়েছে।print $0x
থেকে পুরো লাইন ছাপে file1 ব্যবহার করে $0
তারপর x
যার সংরক্ষিত লাইন file2 ।paste
যেতে উপায় । আপনি যদি কিছু অন্যান্য পদ্ধতি পরীক্ষা করতে চান তবে এখানে একটি python
সমাধান দিন:
#!/usr/bin/env python2
import itertools
with open('/path/to/file1') as f1, open('/path/to/file2') as f2:
lines = itertools.izip_longest(f1, f2)
for a, b in lines:
if a and b:
print a.rstrip() + b.rstrip()
else:
if a:
print a.rstrip()
else:
print b.rstrip()
আপনার কয়েকটি সংখ্যক লাইন থাকলে:
#!/usr/bin/env python2
with open('/path/to/file1') as f1, open('/path/to/file2') as f2:
print '\n'.join((a.rstrip() + b.rstrip() for a, b in zip(f1, f2)))
নোট করুন যে অসম সংখ্যক লাইনের জন্য, এটি প্রথমে শেষ হওয়া ফাইলটির শেষ লাইনে শেষ হবে।
এছাড়াও, খাঁটি সাথে bash
(লক্ষ্য করুন এটি খালি লাইনগুলি পুরোপুরি উপেক্ষা করবে):
#!/bin/bash
IFS=$'\n' GLOBIGNORE='*'
f1=($(< file1))
f2=($(< file2))
i=0
while [ "${f1[${i}]}" ] && [ "${f2[${i}]}" ]
do
echo "${f1[${i}]}${f2[${i}]}" >> out
((i++))
done
while [ "${f1[${i}]}" ]
do
echo "${f1[${i}]}" >> out
((i++))
done
while [ "${f2[${i}]}" ]
do
echo "${f2[${i}]}" >> out
((i++))
done
mapfile
ফাইলগুলিকে অ্যারেতে পড়তে ব্যবহার করুন বা দুটি read
কমান্ডের সাহায্যে কিছুক্ষণ লুপ ব্যবহার করুন , প্রতিটি তাদের এফডি থেকে পড়া।
array=( $(cmd) )
বা array=( $var )
। mapfile
পরিবর্তে ব্যবহার করুন।
পার্ল উপায়, বুঝতে সহজ:
#!/usr/bin/perl
$filename1=$ARGV[0];
$filename2=$ARGV[1];
open(my $fh1, "<", $filename1) or die "cannot open < $filename1: $!";
open(my $fh2, "<", $filename2) or die "cannot open < $filename2: $!";
my @array1;
my @array2;
while (my $line = <$fh1>) {
chomp $line;
push @array1, $line;
}
while (my $line = <$fh2>) {
chomp $line;
push @array2, $line;
}
for my $i (0 .. $#array1) {
print @array1[$i].@array2[$i]."\n";
}
শুরু করা:
./merge file1 file2
আউটপুট:
foobar
icecream
twohundred