তৃতীয় কলামের ভিত্তিতে বাছাই করুন


130

আমি একটি বিশাল 4-কলামের ফাইলের মুখোমুখি। আমি এর তৃতীয় কলামের উপর ভিত্তি করে সাজানো ফাইলটি স্টডআউটে প্রদর্শন করতে চাই:

cat myFile | sort -u -k3

কৌতুক সম্পাদন করা কি যথেষ্ট?


4
নোট করুন যে আপনি এটি লিখতে পারেন sort -u -k3 < myFile
জেরিট 15 '15 এ

6
যেমন sort -u -k3 myFile, এমনকি
সেবাস্তিয়ান গ্রাফ

উত্তর:


165
sort -k 3,3 myFile

বর্তমান লোকেলের দ্বারা সংজ্ঞায়িত ক্রম অনুসারে কলামগুলি ফাঁকা (ASCII SPC এবং TAB অক্ষরগুলিতে POSIX / C লোকালে) দ্বারা পৃথক করা হয়েছে ধরে ধরে 3 ডি কলাম অনুসারে বাছাই করা ফাইলটি প্রদর্শিত হবে ।

নোট করুন যে শীর্ষস্থানীয় ফাঁকা স্থানগুলি কলামে অন্তর্ভুক্ত করা হয়েছে (ডিফল্ট বিভাজকটি একটি শূন্যস্থান থেকে ফাঁকাতে স্থানান্তর), এটি লোকালগুলিতে পার্থক্য করতে পারে যেখানে তুলনার উদ্দেশ্যে স্পেসগুলি উপেক্ষা করা হয় না, উপেক্ষা করার -bবিকল্পটি ব্যবহার করুন নেতৃস্থানীয় ফাঁকা

মনে রাখবেন এটি শেল থেকে সম্পূর্ণ স্বতন্ত্র (সমস্ত শেলগুলি সেই কমান্ড লাইনের সমানভাবে পার্স করবে, শেলগুলি সাধারণত sortকমান্ডটি অন্তর্নির্মিত থাকে না)।

-k 33 তম কলাম (অগ্রণী ফাঁকাগুলি সহ) দিয়ে শুরু হওয়া লাইনের অংশটি বাছাই করা । সি লোকালে, যেহেতু স্থান এবং ট্যাব অক্ষরগুলি সমস্ত মুদ্রণযোগ্য অক্ষরের আগে থাকে, যা আপনাকে সাধারণত একই ফল দেয় -k 3,3(একইরকম তৃতীয় ক্ষেত্রের রেখাগুলি বাদ দিয়ে),

-uহ'ল লাইনগুলির মধ্যে একটিকে ধরে রাখতে হবে যদি সেখানে একই ধরণের একাধিক ধরণের উপস্থিত থাকে (সেক্ষেত্রে সারণি কীটি একই রকম হয় (এটি সমান হওয়ার মতো প্রয়োজনীয় নয় তবে ))।

catবিড়াল enate কমান্ড হ'ল। আপনার এখানে দরকার নেই।

যদি কলামগুলি অন্য কিছুর দ্বারা পৃথক করা হয়, আপনার -tবিভাজক নির্দিষ্ট করার জন্য বিকল্পের প্রয়োজন need

উদাহরণস্বরূপ ফাইল a

$ cat a
a c c c
a b ca d
a b  c e
a b c d

সাথে -u -k 3:

$ echo $LANG
en_GB.UTF-8

$ sort -u -k 3 a
a b ca d
a c c c
a b c d
a b  c e

লাইন 2 এবং 3 এর একই তৃতীয় কলাম রয়েছে, তবে এখানে বাছাই কীটি তৃতীয় কলাম থেকে রেখার শেষ পর্যন্ত, সুতরাং -uউভয়ই ধরে রাখে। ␠ca␠dএর আগে বাছাই করে ␠c␠cকারণ আমার লোকালে প্রথম পাসে স্পেসগুলি উপেক্ষা করা হয়, এর cadআগে বাছাই করে cc

$ sort -u -k 3,3 a
a b c d
a b  c e
a b ca d

উপরে কেবল তৃতীয় কলামটি তাদের জন্য রক্ষণাবেক্ষণ করা হবে ␠c␠␠c(2 শীর্ষস্থানীয় স্থান) সহ একটি কীভাবে বজায় রাখা আছে তা দ্রষ্টব্য ।

$ sort -k 3 a
a b ca d
a c c c
a b c d
a b  c e
$ sort -k 3,3 a
a b c d
a c c c
a b  c e
a b ca d

দেখ, আমি কেমন ক্রম a b c dএবং a c c cবিপরীত হয়। প্রথম ক্ষেত্রে, কারণ ␠c␠cসামনে প্রকারের ␠c␠d, দ্বিতীয় ক্ষেত্রে কারণ সাজানোর কী একই (হয় ␠c), শেষ অবলম্বন তুলনা যে পুরো রাখে মধ্যে লাইন তুলনা a b c dসামনে a c c c

$ sort -b -k 3,3 a
a b c d
a b  c e
a c c c
a b ca d

একবার আমরা ফাঁকা স্থানগুলি উপেক্ষা করার পরে, প্রথম 3 লাইনের জন্য বাছাই কী একই ( c) হয়, তাই এগুলি শেষ রিসর্ট তুলনা অনুসারে বাছাই করা হয়।

$ LC_ALL=C sort -k 3 a
a b  c e
a c c c
a b c d
a b ca d
$ LC_ALL=C sort -k 3,3 a
a b  c e
a b c d
a c c c
a b ca d

সি লোকেল সালে ␠␠cসামনে প্রকারের ␠cশুধুমাত্র একটি পাস আছে যেমন যেখানে অক্ষর (তারপর একক বাইটস) সাজানোর তাদের কোড বিন্দু মান (যেখানে স্থান কম কোড বিন্দু আছে উপর ভিত্তি করে c)।


কলামগুলি প্রস্তুত করা blankহয়েছে যা লোকেলের উপর নির্ভর করে স্থান এবং ট্যাব ছাড়াও অন্যান্য অক্ষরকে অন্তর্ভুক্ত করতে পারে।
jfs

1
ভাল, +1। আপনি কি কি ব্যাখ্যা করতে 3,3পারেন? শুধু কেন নয় 3?
টেরডন

@ ইটারডন, উদাহরণ সহ প্রসারিত বিবরণ দেখুন।
স্টাফেন চেজেলাস

@ জেফাসেবাস্টিয়ান, আপনি ঠিক বলেছেন, উত্তর আপডেট হয়েছে।
স্টাফেন চেজেলাস

আহ, এটি 3 য় কেবল বাছাই করার জন্য, বাকী রেখাটি নয়, ধন্যবাদ।
টেরডন

4

যদি আপনি "কলাম" টেক্সট ফাইলে (চতুর্থ চরিত্র) হিসাবে বুঝতে পারেন তবে হ্যাঁ, আপনার সমাধানটি কাজ করা উচিত (বা এমনকি এলোমেলো অ্যাক্সেসের সাথে কিছু মেমরি-সাশ্রয়কারী যাদুবিদ্যার sort -u -k3 myFileঅনুমতি দেওয়ার sortজন্য)। আপনি যদি ডাটাবেসের মতো "কলাম" বুঝতে পারছেন - সম্পূর্ণ পৃথক পৃথক পৃথক পৃথক ডেটা এবং একটি পরিবর্তনক কলাম প্রস্থ, আপনার কিছু ফ্যানসিয়ার প্রয়োজন যেমন এই আকার অনুসারে ls -l

      ls -l |awk '{print $5 " " $0;}'| sort -n | cut -d " " -f 2-

(যা তুচ্ছ সমতুল্য ls -lSতবে উদাহরণটি সুন্দরভাবে পরিবেশন করে))


5
না, করে ডিফল্ট সাজানোর কলাম ফাঁকা পৃথক, তারা না চরিত্র কলাম, 3 য় চরিত্র কলামে সাজাতে হয়, বাক্য গঠন হবে: sort -k 1.3,1.3ls -l | sort -k5,5nআকার অনুসারে বাছাই করা।
স্টাফেন চেজেলাস

awkসমাধান ঠিক কি আমি সহজে জটিল শ্রেণীবিভাজন প্রয়োজনীয়তা মানানসই করার জন্য সংশোধন needed-- হয়
jchook

2
sort -g -k column_number 

নির্দিষ্ট কলাম ব্যবহার করে সংখ্যাসূচক অক্ষরযুক্ত যে কোনও তালিকাকে সাজানোর জন্য ডান কমান্ড


1
-K ব্যবহারটি ইতিমধ্যে বেশ ভালভাবে আচ্ছাদিত ছিল সুতরাং আপনি যদি আদেশ করেন যে এই আদেশটি কীভাবে আলাদা বা আরও ভাল। ওপির আসল প্রশ্নটির সমাধান করতে আপনি প্রকৃত কলাম নম্বরও অন্তর্ভুক্ত করতে পারেন।
জেফ শ্যাচলার

এটি আমাকে ম্যান পেজগুলি ব্যবহার করতে পেল: পি "-জি, - জেনারাল-নিউমেরিক-সাজান, সাধারণ সংখ্যা অনুযায়ী মান তুলনা করুন" যা আমার ক্ষেত্রে আমার প্রয়োজন ছিল what
জোয়েস


0
$ sort -k 1.3,1.3 myfile

আপনার মাইফাইল ফাইলটি তৃতীয় কলামে বাছাই করবে যদি আপনার ফাইলে কোনও বিভাজক না থাকে।

$ cat myfile 
ax5aa 
aa3ya 
fg7ds 
pp0dd 
aa1bb

$ sort -k 1.3,1.3 myfile 
pp0dd 
aa1bb
aa3ya 
ax5aa 
fg7ds 

সাজানোর ম্যান পৃষ্ঠা:

[...] -কি, --কি = পোস 1 [, পস 2] পস 1 এ একটি কী শুরু করুন (উত্স 1), এটি পস 2 এ শেষ করুন (লাইনের ডিফল্ট প্রান্ত) [...] পস এফ [.সি] [ ওপিটিএস], যেখানে এফ ক্ষেত্রের নম্বর এবং সি ক্ষেত্রের চরিত্রের অবস্থান; উভয়টির উৎপত্তি ১। যদি না -t বা -b কার্যকর না হয় তবে কোনও ক্ষেত্রের অক্ষর পূর্ববর্তী শ্বেত স্থানের শুরু থেকেই গণনা করা হয়। ওপিটিএস হ'ল এক বা একাধিক একক-চিঠি ক্রম বিকল্প, যা সেই কীটির জন্য গ্লোবাল অর্ডারিং বিকল্পগুলি ওভাররাইড করে। যদি কোনও কী দেওয়া না হয় তবে পুরো লাইনটি কী হিসাবে ব্যবহার করুন।

--Key = 1.3,1.3 দিয়ে, আপনি বলেছিলেন যে কেবলমাত্র একটি ক্ষেত্র (সম্পূর্ণ লাইন) এবং আপনি এই ক্ষেত্রের তৃতীয় অক্ষরের অবস্থানের তুলনা করছেন।

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