ধরুন আমার কাছে একটি ফাইল রয়েছে:
file1:
PAPER TEAM MANISH NISHA GARIMA JYOUTI ........etc
ফাইল 2 আমি চাই:
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
ফাইল 1-এর কলাম রূপান্তর করতে সারি।
ধরুন আমার কাছে একটি ফাইল রয়েছে:
file1:
PAPER TEAM MANISH NISHA GARIMA JYOUTI ........etc
ফাইল 2 আমি চাই:
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
ফাইল 1-এর কলাম রূপান্তর করতে সারি।
উত্তর:
ব্যবহার tr
, প্রতিটি পুনরাবৃত্তি স্থান অক্ষর (প্রতিস্থাপন ) একটা একক নতুন লাইন (সঙ্গে
\n
) অক্ষর।
tr -s ' ' '\n'< infile > outfile
1 2 3 4 1 এ # abcd -> 2 বি $ # $ @% 3 সি @ 4 ডি%
awk
আমরা করতে পারে সঙ্গে :
awk '{ for (i=1; i<=NF; i++) RtoC[i]= (RtoC[i]? RtoC[i] FS $i: $i) }
END{ for (i in RtoC) print RtoC[i] }' infile
এটি প্রতিটি একই ফাইল করা নম্বর পজিটোনকে এক সাথে যুক্ত করে এবং END
ফলাফলটি মুদ্রণ করে যা প্রথম কলামে প্রথম সারিতে হবে, দ্বিতীয় সারিতে দ্বিতীয় কলামে থাকবে ইত্যাদি etc. অবশ্যই ইনপুট ফাইলটি আপনার স্মৃতি আকারের মধ্যে সীমাবদ্ধ।
আপনি কেবল গ্রেপের মাধ্যমে এটি করতে পারেন। ডিফল্ট গ্রেপ দ্বারা, ম্যাচটি একটি পৃথক নতুন লাইনে মুদ্রণ করবে।
grep -oP '\S+' infile > outfile
অথবা
grep -o '[^[:space:]]\+' infile > outfile
grep
আপনি fmt
কমান্ডটি ব্যবহার করতে পারেন :
~$ cat f
PAPER TEAM MANISH NISHA GARIMA JYOUTI
~$ fmt -1 f
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
সঙ্গে গনুহ datamash :
$ datamash -W transpose <file
PAPER
TEAM
MANISH
NISHA
GARIMA
JYOUTI
datamash
এই টাস্কটির সেরা হাতিয়ার হিসাবে মনে হচ্ছে, তবে আরও কতগুলি সরঞ্জাম ব্যবহার করা যেতে পারে তা আকর্ষণীয়!
আপনি এটি ব্যবহার করে এটি করতে পারেন sed
:
$ sed -e 's/ */\n/g' file1 > file2
দ্রষ্টব্য: শব্দের মধ্যে স্পেস রয়েছে এমন পরিস্থিতিটি পরিচালনা করে না।
\n
ব্যবহার awk
, আউটপুট ক্ষেত্র বিভাজক (সেটিং OFS
রেকর্ড হিসাবে) (লাইন) বিভাজক ( RS
):
awk '{OFS=RS;$1=$1}1' file > file2
একটি for
লুপ ব্যবহার :
for val in `cat file1` ; do echo $val >> file2; done;
পাইথন সংস্করণ:
python -c "import sys;lines=[l.replace(' ','\n') for l in sys.stdin.readlines()];print(''.join(lines))" < input.txt > output.txt
এটি <
পাইথনের স্টিডিন থেকে পুনর্নির্দেশটি ব্যবহার করে এবং পুনঃনির্দেশগুলি ব্যবহার করে input.txt
লেখেন । ওয়ান-লাইনার নিজেই সমস্ত লাইনে স্ট্রিংগুলির তালিকার মধ্যে পড়ে, যেখানে সমস্ত স্পেসগুলি নতুন লাইনের সাথে প্রতিস্থাপন করা হয় এবং আমরা ফাংশনটি ব্যবহার করে পুরো পাঠ্য পুনর্নির্মাণ করি ।output.txt
>
stdin
.join()
সিরিজের একাধিক স্পেসগুলি নতুন .split()
লাইনের সাথে প্রতিস্থাপন করা এড়াতে বিকল্প পদ্ধতির শব্দের তালিকার লাইনটি ভাঙ্গতে ব্যবহার করা। এইভাবে, আমরা নিশ্চিত করতে পারি যে প্রতিটি শব্দ কেবল একটি নতুন লাইন দ্বারা পৃথক করা হয়েছে
python -c "import sys;lines=['\n'.join(l.strip().split()) for l in sys.stdin.readlines()];print('\n'.join(lines))" < input.txt > output.txt
ব্যবহার xargs
, ( সৌরভকের উত্তর থেকে চুরি ):
xargs -n 1 < File1 > File2
অথবা যদি কোনও ছোটখাটো পুনরায় printf
ফর্ম্যাটিংয়ের প্রয়োজন হয় তবে ফর্ম্যাট স্ট্রিংগুলি যেমন প্রয়োজন তেমন ব্যবহার করুন :
xargs printf '%s\n' < File1 > File2
আমার সমাধানটি হবে:
#!/bin/bash
cols=$(head -1 file.txt | wc -w)
for i in $(seq 1 $cols); do
cut -d ' ' -f$i file.txt | tr '\n' ' ' | sed s'/.$//'
echo
done