मैं कई कॉलम के साथ कॉमा सीमांकित फ़ाइल को सॉर्ट करने के लिए यूनिक्स तरह का उपयोग कर रहा हूं। इस प्रकार, यह पूरी तरह से या तो संख्यात्मक रूप से या वर्णानुक्रम में डेटा को सॉर्ट करने के लिए काम किया है:
किसी भी छँटाई से पहले उदाहरण फ़ाइल:
C,United States,WA,Tacoma,f,1
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
A,United States,NY,New York,f,1
फ़ाइल को क्रमबद्ध करें: $ sort -t ',' -k 2,2 -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
क्रमबद्ध परिणाम:
A,Bahamas,Bahamas,Nassau,f,2
A,Canada,QC,Montreal,f,2
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
यहाँ मुद्दा है: मैं एक कस्टम प्रकार के आधार पर कॉलम 2 को सॉर्ट करना चाहता हूं, जिसका अर्थ है कि मैं पहले संयुक्त राज्य चाहता हूं, फिर कनाडा, फिर बहामा:
वांछित प्रकार:
A,United States,MA,Boston,f,0
B,United States,NY,New York,f,5
A,United States,NY,New York,f,1
C,United States,WA,Tacoma,f,1
A,Canada,QC,Montreal,f,2
A,Bahamas,Bahamas,Nassau,f,2
क्या यूनिक्स पास करने का कोई तरीका है जो एक कस्टम प्रकार का क्रम है जिसे वह तब लागू कर सकता है? कुछ इस तरह:
$ sort -t ',' -k 2,2:'United States, Canada, Bahamas' -k 3,3 -k 4,4 -k 5,5r -k 6,6nr tmp.csv
धन्यवाद!
t
बजाय नहीं होना चाहिए f
?
join
कमांड है, लेकिन आप बहुत सारे छंटनी के साथ समाप्त हो सकते हैं - एक के लिए इनपुट फ़ाइलोंjoin
को एक क्रम में सॉर्ट किया जाना चाहिए, और फिर आपsort
डेटा डालने के लिए फिर से उपयोग करेंगे। एक अलग क्रम (और सॉर्ट क्रम स्तंभ को एक पोस्ट-सॉर्ट चरण के रूप में खोना)।