क्या यूनिक्स यूनीक के बराबर एक विंडोज है?


17

मुझे पाठ फ़ाइल से डुप्लिकेट लाइनों को हटाने की आवश्यकता है, यह लिनक्स में सरल है

cat file.txt |sort | uniq

जब file.txt सम्‍मिलित है

aaa
bbb
aaa
ccc

इसका उत्पादन होगा

aaa
bbb
ccc

क्या कोई विंडोज समकक्ष है? या विंडोज तरीके से यह कैसे करते हैं?


10
यूनिक्स पर, आप इसे लिख सकता है के रूप मेंsort -u file.txt
JFS

1
WSL भी है जो बहुत अच्छी तरह से काम करता है जहाँ तक इस तरह का सामान जाता है
user2813274

शायद आप समाधान के रूप में कुछ सेट करना चाहते हैं, अगर आपके पास कोई और प्रश्न नहीं है?
दाविदबूमन

जवाबों:


31

Sort-ObjectPowerShell में cmdlet एक का समर्थन करता है -Uniqueस्विच है कि के रूप में एक ही बात करता है uniq:

Get-Content file.txt | Sort-Object -unique

बेशक, PowerShell में एलियंस की उपस्थिति के कारण, आप यह भी लिख सकते हैं:

type file.txt | sort -unique

इसके अतिरिक्त, विंडोज 10 का एक अविभाजित /uniqueस्विच है sort.exe, इसलिए, यह कमांड प्रॉम्प्ट में काम करना चाहिए:

type file.txt | sort /unique

1
मुझे नहीं लगता कि विंडोज कमांड ( sort.exe) इसका समर्थन करता है; यह पावरशेल बिलिन की एक विशेषता की तरह दिखता है।
बेन वोइग्ट

1
type unsorted.txt | sort -unique> Sorted.txt यह वास्तव में win10 के तहत काम करता है और नई फ़ाइल के लिए अद्वितीय मानों को
राइट

7
@BenVoigt आश्चर्यजनक रूप से, type file.txt | sort /uniqueके साथ काम करता अप्रलेखित स्विच /uniqueकी sort.exe(विंडोज 10 पर कम से कम) उपयोगिता। दूसरी तरफ, आप सही हैं कि बशर्ते उदाहरण PowerShell है Get-Content file.txt | Sort-Object -unique, वास्तव में।
जोसेफज

1
sort /uniqueInvalid switch.विंडोज 7 एंटरप्राइज के साथ त्रुटियां ।
डॉन क्रिकेशंक

1
@ जोसेफ, उत्तर "/" (फॉरवर्ड-स्लैश) का उपयोग करके स्विच निर्दिष्ट करता है और डैश नहीं; फॉरवर्ड-स्लैश सीएमडी में कमांड के लिए विंडोज मानक है, और सभी कमांड कमांड स्विच पर स्लैश के लिए डैश को प्रतिस्थापित करने की अनुमति नहीं देते हैं। त्वरित संदर्भ के लिए docs.microsoft.com/en-us/windows-server/administration/… लगातार स्लैश दिखाता है। ऊपर एक महान जवाब था, एक tidbit साझा करना आमतौर पर ज्ञात नहीं है, हालांकि मैं कल्पना नहीं कर सकता कि "/ अद्वितीय" स्विच अनडूएटेड है क्योंकि यह बहुत उपयोगी है।
देबरा

6

वहाँ uniq के पोर्ट हैं जो gnu / coreutils संस्करणों के लिए समान रूप से काम करते हैं। मैं व्यक्तिगत रूप से GOW से भिन्नता का उपयोग करता हूं, लेकिन विंडोज़ के लिए git में एक नया संस्करण है । हालांकि बाद के लिए आपको us / usr / bin में देखने की आवश्यकता नहीं है

चूंकि इन पैकेजों में बिल्ली, सॉर्ट और यूनीक भी होते हैं - आपके वर्कफ़्लो को ज्यादातर समान cat file.txt |sort | uniqहोना चाहिए , और ज्यादातर पहचान के लिए काम करना चाहिए


2

आप आसानी से अपने आप से कमांड "यूनीक" लिख सकते हैं। इसे एक बैच फ़ाइल "uniq.cmd" में सहेजें कहीं आपके% पथ% को मिल सकता है (उदाहरण के लिए% windir% \ system32)। यह संस्करण संवेदनशील नहीं है:

@echo off
setlocal DisableDelayedExpansion
set "prev="
for /f "delims=" %%F in ('sort %*') do (
    rem "set" needs to be done without delayed expansion
    set "line=%%F"
    setlocal EnableDelayedExpansion
        set "line=!line:<=<!"
        if /i "!prev!" neq "!line!" echo(!line!
        set "prev=!line!"
    endlocal
)

यह "uniq mytextfile" के साथ-साथ "cat mytextfile | uniq" के साथ काम करता है; के रूप में सभी इनपुट और तर्क बस क्रम कमांड के लिए पारित कर रहे हैं।

विंडोज 7 से शुरू होने पर, आप वास्तव में केस संवेदी संस्करण (अंतर ist undocumented स्विच "सॉर्ट / सी" और कोई "if / i") चाहते हैं:

@echo off
setlocal DisableDelayedExpansion
set "prev="
for /f "delims=" %%F in ('sort /C %*') do (
    rem "set" needs to be done without delayed expansion
    set "line=%%F"
    setlocal EnableDelayedExpansion
        set "line=!line:<=<!"
        if "!prev!" neq "!line!" echo(!line!
        set "prev=!line!"
    endlocal
)

अच्छा लगा, लेकिन इसमें कुछ खामियां हैं। यह वर्तमान में सामग्री की तरह साथ विफल /?, ON, one ^ caretया bang!। लेकिन टॉगल विलंबित विस्तार कलाओं का उपयोग करके इसे हल किया जा सकता है और echo(देखें: Dostips: ECHO। पाठ या रिक्त पंक्ति देने में विफल रहता है
जेब

धन्यवाद, टॉगल विलंबित विस्तार कलाओं का उपयोग करने का कारण स्पष्ट नहीं था और न ही चिह्नित किया गया था। मैंने अपने उदाहरणों को अभी (लगभग) परिपूर्ण किया है।
टॉम स्टीन

0

यू जियाओ के जवाब के अलावा। आप sort-objectएक कमांड प्रॉम्प्ट में पॉवरशेल्ड cmdlet को इनवाइट कर सकते हैं जैसे:

type file.txt | powershell -nop "$input | sort -unique"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.