আমি কীভাবে একটি পাঠ্য ফাইলের সমস্ত লাইনকে একক লাইনে একত্রিত করব?


28

আমি একটি পাঠ্যের সমস্ত লাইন এক লাইনে পেতে চাই। আমি কোডিং শিখে শেখার চেষ্টা করে একটি শিক্ষানবিস। আমি এই সমস্যাটি সমাধান করার চেষ্টা করে চার ঘন্টা ব্যয় করেছি। আমি জানি এই সমস্যার একটি সহজ সমাধান আছে। এখানে আমি চেষ্টা করে যাচ্ছি।

sed -e 'N; s / \ n //' myfile.txt # কিছুই নেই

সেড-ই: এ-এন-ই 'এস / \ এন / /' -ই টা মাইফাইল.txt # আউটপুট সমস্ত গন্ডগোল করেছে এবং আমি সিনট্যাক্সের মাথা বা লেজ বানাতে পারি না

বিড়াল myfile.txt | tr -d '। n'> myfile.txt # সমস্ত লাইন মুছে ফেলে

এখানে পাঠ্য ফাইলটি রয়েছে:

500212
262578-4-4
23200
গ্রিফিত পরীক্ষাগার লিমিটেড
গ্রিফিত পরীক্ষাগার
দক্ষিণ ডাবলিন কাউন্টি কাউন্সিল
দপ্তর
অফিস (শিল্প)
তালিকা হারে
2 পাইনভিউ শিল্প সম্পদ
ফারহাউস রোড
Knocklyon
31 ডিসেম্বর 2007
01 জানুয়ারী 2008 "   

আমি কোথায় ভুল হয়ে গিয়েছি তা বুঝতে পারি না ....

উত্তর:


31

trআপনি যেমন ব্যবহার করেছেন এটি কাজ করা উচিত এবং সবচেয়ে সহজ - আপনার কেবল অন্য কোনও ফাইলে আউটপুট নেওয়া দরকার । আপনি যদি ইনপুট ফাইলটিকে আউটপুট হিসাবে ব্যবহার করেন তবে ফলাফলটি খালি ফাইল যা আপনি লক্ষ্য করেছেন;

বিড়াল myfile.txt | tr -d '\ n'> online.txt

আপনার মনে রাখতে হবে কিছু সম্পাদক এর সাথে একটি লাইন সমাপ্ত করে \r\n। এই ক্ষেত্রে, ব্যবহার করুন

cat myfile | tr -d '\r\n'

আপনার সহায়তার জন্য ধন্যবাদ তবে এটি এখনও কাজ করছে না। আমি জানি এটি মৌলিক এবং সাধারণ বিষয়। আপনি যে আদেশটি দিয়েছেন তা সমস্ত লাইন মুছে ফেলেছে। আমি ফাইল পোষ্ট করতে 500212 262578-4-4 23200 Griffith গবেষণাগার LTD হল Griffith গবেষণাগার South Dublin কাউন্টি কাউন্সিল অফিস (ইন্ডাস্ট্রিয়াল) তালিকা মূল্য ধার্য করিবার যোগ্য 2 Pineview শিল্প নগরী Firhouse রোড Knocklyon 31 ডিসেম্বর 2007 01 জানুয়ারী 2008 যাচ্ছি
জন

@ জোহান: ফলাফল বা ত্রুটি কী?
ইশ

আমি আমার উত্তর সম্পাদনা করে পোস্ট করতে যাচ্ছিলাম। কমান্ডটি ব্যবহার করার পরে ফাইলটি ফাঁকা ছিল। এটি "বিড়াল reval_details.asp? Pno = 500211.txt | tr -d '\ n'> reval_details.asp? Pno = 500211.txt" টার্মিনালে দেখে মনে হয়েছিল। আবার ধন্যবাদ.
জন

@ জন: আপনি একই আউটপুট ফাইলের নাম ব্যবহার করতে পারবেন না !! (উত্তর দেখুন) দয়া করে চেষ্টা করুনcat reval_details.asp?Pno=500211.txt | tr -d '\n' > new_reval_details.asp?Pno=500211.txt
ইশ

1
এটি করার আরও ভাল উপায় tr -d '\n' <input.txt > output.txtহ'ল - এটি বিড়ালের অকেজো ব্যবহার এড়িয়ে যায় এবং একটির চেয়ে কম অপ্রয়োজনীয় পাইপ ব্যবহার করে।
অসুরসপ

8

এটা এখানে. এটি অন্য একটি সমাধান এবং সহজ সহজ।

echo $(cat Input.txt) > Output.txt

2
আমি বিশ্বাস করি না যে এই কাজ হয়েছে, দুর্দান্ত
মিচিড

echo `cat Input.txt` > Output.txt আরও কাজ করে, কেবল অন্য রূপটি
রাইডার 33

যদি একক বিভাগে একাধিক সাদা স্পেস (স্পেস, ট্যাব, নিউলাইন এবং তাই) থাকে তবে তারা স্থান দ্বারা প্রতিস্থাপিত হবে।
iBug

এটি একটি দুর্দান্ত সমাধান, তবে আমার কম্পিউটারে আমি দেখতে পেলাম যে trসমাধান হিসাবে কাজ করতে এটি প্রায় তিন গুণ সময় নেয় takes
এলএস

3

সহজ পদ্ধতি

অ্যাজক ব্যবহার করে অন্য একটি পদ্ধতি,

cat myfile.txt | awk '{print}' ORS=''

আউটপুট:

500212262578-4-423200 গ্রিফটি ল্যাবরেটরিজস লিমিটেড গ্রিফিফট ল্যাবরেটরিসিয়ুথ ডাবলিন কাউন্টি কাউন্সিল অফ ফিনফেস (শিল্প) তালিকা রেটেবল 2 পাইনভিউ ইন্ডাস্ট্রিয়াল এস্টেট ফার্মওয়্যার রোডকনক্লিয়োন 31 ডিসেম্বর 200701 জানুয়ারী 2008 "

বিঃদ্রঃ:

ORS = '' -> এটি আপনার ক্ষেত্রের বিভাজক, ক্ষেত্র বিভাজক হিসাবে একক উদ্ধৃতিগুলির মধ্যে আপনার কোনও অক্ষর থাকতে পারে। এই অ্যাঙ্ক পদ্ধতিটি ব্যবহার করে আমরা স্পেস এবং সমস্ত অক্ষর অন্তর্ভুক্ত করতে পারি।

আশা করি এটি সাহায্য করতে পারে!


1
ওআরএস হ'ল আউটপুট রেকর্ড পৃথককারী। ওএফএস হ'ল আউটপুট ফিল্ড বিভাজক। দেখুন thegeekstuff.com/2010/01/... বাman awk
এল্ডার গিক

3

:aমূল নির্দেশের বাইরে লেবেল লাগানোর দরকার নেই , -eবিকল্পের প্রয়োজনীয়তাও নেই; অবশেষে, এটি /$/অতিরিক্ত অতিরিক্ত (প্রতিটি লাইনের একটি EOL অক্ষর রয়েছে)।

অন্যান্য উত্তরগুলি উন্নত করে, একজন পেয়ে যায়

sed -i ':a; N; s/\n/ /; ta' file

নীচে লিখিত থাকলে কোনটি পরিষ্কার হয়,

sed -i ':a
        N
        s/\n/ /
        ta' file

কমান্ড নিম্নলিখিত হিসাবে কাজ করে:

  1. N (মাল্টলাইন) প্যাটার্ন স্পেসে পরবর্তী লাইনটি যুক্ত করে, এতে ইতিমধ্যে বর্তমান লাইন রয়েছে;
  2. s/\n/ /একটি স্থান দিয়ে \nউত্পাদিত নতুন লাইন চরিত্রটি প্রতিস্থাপন করুন ;N
  3. ta:a দ্বিতীয় ধাপে প্রতিস্থাপনটি সফল হওয়ার পরে লেবেলটি অনুসরণ করে স্ক্রিপ্ট লাইনে চলে যায় , অর্থাত্ যদি প্রতিস্থাপনটি ঘটে থাকে তবে স্ক্রিপ্টের শেষে "আঘাত" না করে অর্থাত্ ইনপুটটির অন্য একটি লাইন না পড়েই মৃত্যুদণ্ড 1 ধাপে চলে যায় ।

নিম্নলিখিত নোট করুন;

  • sedপ্রথম লাইন থেকে শুরু করে একের পর এক ইনপুট ফাইলের লাইনগুলি পড়ে ;
  • :a এটি কেবল একটি লেবেল, মৃত্যুদন্ড কার্যকর করার জন্য নয়;
  • N , নীতিগতভাবে, যে কোনও লাইনে মৃত্যুদন্ড কার্যকর করা হয়, কিন্তু
  • s/\n/ /(নীতিগতভাবে যে কোনও লাইনে মৃত্যুদন্ড কার্যকর করা) যে কোনও লাইনে সফল তবে শেষেরটি , তাই
  • taস্ক্রিপ্টের শেষটি তখনই পৌঁছানো যায় যখন ইনপুটটির শেষ লাইনটি পড়ে (একমাত্র লাইন যেখানে sব্যর্থ হয়), তাই
  • প্রথমটি পড়ার পরে প্যাটার্ন স্পেসে আর কোনও ইনপুট লাইনটি পড়বে না, যদি না শেষটিটি না পড়ে থাকে তবে তারপরে আর পড়ার আর কোনও রেখা নেই এবং অন্তর্নিহিত pকমান্ড কার্যকর করা হয়।

সুতরাং স্ক্রিপ্টটি মূলত ইনপুটটির প্রথম লাইনটিতে পড়ে এবং নিম্নলিখিত লাইনগুলিকে একে একে যুক্ত করে রাখে, প্রতিবার একটি স্থানের সাথে নিউলাইনটি স্থাপন করে; শেষ লাইনটি সংযুক্ত হওয়ার পরে (এবং \nএকটি স্পেসে পরিবর্তিত হয়ে), Nকোনও লাইন সংযোজন করতে পারে না, sব্যর্থ হয়, taএড়িয়ে যায়, স্ক্রিপ্টের শেষে পৌঁছে যায় এবং pআবদ্ধ রিন্ট স্টেটমেন্টটি বর্তমান লুং 1-লাইন প্যাটার্ন স্পেসে কার্যকর করা হয় ।

-iবিকল্প ইনপুট ফাইল কর্মের পরিবর্তে fileপুরো 1-লাইন প্যাটার্ন স্থান সঙ্গে।


2

gedit:

\nএকটি স্থান '' দিয়ে অনুসন্ধান করুন এবং প্রতিস্থাপন করুন ।
আপনি 'অনুসন্ধান' -> 'প্রতিস্থাপন' এ গিয়ে
বা কিবার্ড শর্টকাট Ctrl+ এর মাধ্যমে প্রতিস্থাপন উইন্ডোটি পেতে পারেনH

স্ক্রিনশটটি নীচে দেখুন:

আপনার মূল পাঠ্য 1-14 লাইনে রয়েছে।
ফলাফল লাইন 16 হয়।

এখানে চিত্র বর্ণনা লিখুন



1

এটা চেষ্টা কর

sed -e :a -e '/$/N; s/\n/\\n/; ta' [filename]

http://anandsekar.github.io/joining-all-lines-in-a-file-using-sed/


2
আপনি কি এই সমস্ত সুইচ সম্পর্কে আরও বিশদ / ব্যাখ্যা দিতে পারেন? এটি কেন কাজ করছে বা না করছে তা আরও ভাল করে বুঝতে পারে।
বেনোইট

0

আমি মনে করি আপনি কেবল ভুলে যাচ্ছিলেন যে আপনার নিজের ফাইল.txt এর আউটপুটটিকে কাঙ্ক্ষিত ফলাফল, নতুন ফাইল.টেক্সটকে পুনর্নির্দেশের জন্য সেডকে বলা দরকার। এই কমান্ডের সাহায্যে আপনি প্রয়োজন উপস্থিত হতে পারে, কিন্তু শুধুমাত্র যদি আপনি যে ফাইলগুলি একত্রীকরণ করার চেষ্টা করছেন sed এর বাফার করার জন্য অত্যন্ত বড় নয়: sed -e :a -e N -e 's/\n/ /' -e ta yourfile.txt >newfile.txtএখানে অন্য ফোরামে ক্রেডিট , যেখানে তারা সেডের ক্ষমতা নিয়ে আলোচনা করে। আমি আদেশটি পরীক্ষা করেছি এবং এটি আমার পক্ষে কাজ করেছে।


1
প্রকৃতপক্ষে, স্যুইচটি সহ সেডটি-i মূল ফাইলটি ইনলাইনটি সংশোধন করবে , সুতরাং অন্য কোনও ফাইলে আউটপুট দেওয়ার দরকার নেই। সাবধান!
ইশ

আমি সেড-ই চেষ্টা করেছি: এ-এন-ই / এস / \ এন / / '-ই ট রিভাল_ডেটেলস.এসপি? পিএনও = 500214.txt 01 জানুয়ারী ২০০ust এডাস্টারাল এস্টেট সেড -i: এ-এন এন-এর / \ n / / '-e টা রিভাল_ডেটেলস.এসপি? পিএনও = 500214.txt সেড:' সেড-এ'-তে লাফানোর জন্য লেবেল খুঁজে পাচ্ছে না a' sed -i :a -e N -i 's/\n/ /' -e ta reval_details.asp?Pno=500214.txt sed: can't find label for jump to : এ-এন-আই 'এস / \ n / /' -'এই রিভাল_ডেটেলস .asp? Pno = 500214.txt sed: s / \ n / / পড়তে পারে না: এ জাতীয় কোনও ফাইল বা ডিরেক্টরি নেই # কোনও ধারণা নেই।
জন

@ মিক আমার এখনও ভাগ্য হয়নি তবে উত্তরের জন্য ধন্যবাদ।
জন

আমি আপনার পাঠ্যটিকে একটি পাঠ্য সম্পাদকের মধ্যে অনুলিপি করে আটকিয়ে দিয়েছি এবং ফাইলটি সংরক্ষণ করেছি তারপরে আমার সেড কমান্ডটি ব্যবহার করেছে এবং ন্যানোতে খোলার সময় এটি সমস্ত এক লাইনে প্রদর্শিত হয়েছিল; তবে আপনি যদি টার্মিনালে বিড়াল ব্যবহার করে ফাইলটি খোলেন তবে এটি মোড়ানো হবে এবং এটি কেবল একটি লাইন হিসাবে উপস্থিত হবে না, তাই সম্ভবত এটি ঘটছে। এছাড়াও, আপনাকে সেড করার আগে 'দরকার নেই এবং আমি মনে করি আপনি উপরের কমান্ডটিতে আরও কিছু অপ্রয়োজনীয় উপাদান যুক্ত করেছেন, সুতরাং সেড চেষ্টা করুন: a -e N -e' s / \ n / /'e ta yourfile.txt> newfile.txt লাইনটি এত দীর্ঘ যে এটি যদি আপনার 30+ ইঞ্চি মনিটর না থাকে তবে এটি স্ক্রিনে আবৃত প্রদর্শিত হবে!

পোস্টের জন্য মিক চিয়ার্স আমি আমার ডেটা একটি পাঠ্য সম্পাদক এ টাইপ করেছি এটি সংরক্ষণ করে 'সেড-ই: এ-এন-ই' এস / / এন / / '-ই টো অ্যাব.সি.এক্সটিটি> abc1.txt' চালিয়েছি এবং এটি কার্যকর হয়েছে। পুরোপুরি। হাল্লিলূয়া। আমি তখন 'সেড-ই: টাইপ করেছি: এ-এন-ই' এস / \ এন / / -ই ট্য রিভাল_ডেটেলস.এসপি? পিএনও = 500215.txt> পিএনও = 500215.txt 'এবং প্রথমটি বাদে প্রতিটি লাইনে একটি ছিল লাইনের শুরুতে স্থান যুক্ত হয়েছে। আপনি যে প্রচেষ্টাটি করেছেন তাতে আমি প্রশংসা করি তবে আমি মনে করি আমি অষ্টভরে এগিয়ে যাব এবং সেখানে ডেটা চেষ্টা করব এবং প্রক্রিয়া করব।
জন

0

খাঁটি বাশ সমাধান:

while read i; do printf '%s ' "$i"; done < file.txt > outfile.txt

0

এটি যদি আমি থাকতাম তবে আমি কেবল এটি ভিমে খুলতাম এবং কয়েকবার Shift+ টিপতাম J



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