अन्य स्तंभों को परिवर्तित किए बिना एक स्तंभ को सॉर्ट करना


10

मुझे हाल ही में फ़िल्टरिंग !तकनीक के बारे में पता था , और मुझे यह पसंद है। दुर्भाग्य से, मैं इसे दृश्य-ब्लॉक मोड में उपयोग करने में सक्षम नहीं हूं। आशा है कि यहाँ कुछ विशेषज्ञ मेरी मदद करेंगे।

मूल रूप से, मैं नीचे तीसरे (सिर्फ एक MWE) जैसे कॉलम को इन-प्लेस करना चाहता हूं। और जब मैं छांटता हूं तो मैं दूसरे कॉलम को परेशान नहीं करना चाहता।

मैंने !नेत्रहीन (ब्लॉक-मोड) को sortउपयोगिता के माध्यम से तीसरे कॉलम को फ़िल्टर ( ) करने की कोशिश की । लेकिन छांटने के बजाय चयन से परे फैली हुई है यानी सभी पंक्तियों की अदला-बदली हुई है, न कि केवल चयन, वह भी पहले कॉलम के आधार पर छंटनी !

1.  LARGEST         40
2.  SECOND-LARGEST  168     
3.  MID             2.8     
4.  MID             540     
5.  MID             14.84   
6.  MID             40      
7.  SECOND-LEAST    64      
8.  LEAST           8

मैंने दृश्य-ब्लॉक का उपयोग करके अंतिम कॉलम चुना, और कहा कि !sort --reverseजो दिखाता है

'<,'>!sort --reverse

और परिणाम विचित्र है, जिसकी मुझे उम्मीद थी। परिणाम में पूरी पंक्तियाँ छँटाई / बदली गई हैं, न कि केवल एक स्तंभ, और वह भी, मेरे तीसरे-स्तंभ के चयन के बावजूद पहले कॉलम के आधार पर !

 8.  LEAST           8    
 7.  SECOND-LEAST    64      
 6.  MID             40      
 5.  MID             14.84   
 4.  MID             540     
 3.  MID             2.8     
 2.  SECOND-LARGEST  168     
 1.  LARGEST         40   

जब तक अन्यथा असंभव न हो, मैं अपेक्षाकृत उन्नत उपकरण जैसे कि sed/ के बजाय एक शुद्ध विम + सॉर्ट समाधान चाहूंगा awk। यह कहना, दृश्य-विधा की तुलना में दृश्य-ब्लॉक मोड कितना सीमित है, खुद को जानना अधिक महत्वपूर्ण है।


यह आपकी समस्या को हल नहीं करता है, लेकिन ध्यान दें कि एक विम आंतरिक sortकमांड उपलब्ध है, इसलिए आपको !sortनियमित रूप से करने के लिए बाहरी को आमंत्रित करने की आवश्यकता नहीं है ।
दलेर

2
फिल्टर केवल लाइनों पर काम करते हैं
रोमेनिल

@ डल्कर हाँ, धन्यवाद। लेकिन मैंने पहले ही कोशिश की, जिसने एक समान परिणाम दिया।
संभावना

@romainl क्या यह है? आशा की कोई किरण नहीं? मुझे शायद ही ऐसा लगे कि विम के साथ हो रहा है !! लेकिन फिर भी, क्या यह कहना अजीब नहीं है कि "फ़िल्टर केवल लाइनों पर काम करते हैं " जब आप कुछ और चुनते हैं और आउटपुट तक किसी समस्या का कोई संकेत नहीं होता है? यदि यह चेतावनी / त्रुटि नहीं देता है, तो मैं यह भी तर्क दूंगा कि यह एक बग है।
संभावना

एक दोष? हाहा नहीं। व्यवहार न केवल प्रलेखित ( :help filter) है, बल्कि मानकीकृत भी है (क्षमा करें, मुझे नहीं पता कि पीओएस कैसे लिंक करें)। यदि आप RFTM नहीं करते हैं तो आप शिकायत नहीं कर सकते।
रोमेनिल

जवाबों:


9

मुझे लगता है कि आपका सबसे अच्छा आशा है कि vis.vim प्लगइन है। यह प्लगइन एक कमांड प्रदान करता है Bजो किसी ब्लॉक में कमांड को लागू करने की अनुमति देता है।

प्लगइन स्थापित करने के बाद, आप अपना ब्लॉक चुनेंगे और फिर उपयोग करेंगे:

:'<,'>B !sort

ध्यान दें कि कमांड कुछ भी हो सकता है, इसलिए !sortआप के बजाय ब्लॉक पर कई अन्य प्रसंस्करण कर सकते हैं जैसे कि इसे किसी अन्य फ़ाइल ( :'<,'>B w foo.txt) में सहेजना या प्रतिस्थापन ( :'<,'>B s/foo/bar/g) लागू करना


1
@LovesProbability, यदि आप अपने पहले दो कॉलमों में बदलाव किए बिना तीसरे कॉलम को क्रमबद्ध करने की कोशिश कर रहे हैं, तो यह धागा मददगार हो सकता है।
जेयर लोपेज

@ JairLópez कोई अपराध नहीं है, यह वास्तव में अजीब है कि कैसे मेरे सवाल को किसी और व्यक्ति द्वारा कहीं और कॉपी किया जाता है, जहां उसे मूल स्रोत पर वापस जाने के लिए कहा गया (यानी इस उत्तर के एक पृष्ठ के साथ-साथ इस उत्तर की प्रतिलिपि), और अंत में आप मुझे वहां एक उत्तर खोजने के लिए कहेंगे।
संभावना

आपकी टिप्पणी के लिए धन्यवाद, मैंने ऐसा इसलिए किया क्योंकि (1) आपका प्रश्न और यह उत्तर दोनों दिलचस्प थे; (२) हो सकता है कि आप अकेले न हों और ऐसे और लोग हों जिनकी दिलचस्पी इसमें है; (3) यह किसी को यह समझने में मदद करने का एक शानदार अवसर है कि $ब्लॉकव्यू विज़ुअल मोड में कैसे उपयोग किया जाता है।
जय लोपेज़
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.