2012-10-11 6 views
9

मैं की तरह एक फ़ाइल है कहते हैं:विंडोज़/डॉस खोल/बैच कमांड का उपयोग करके, मैं एक फाइल कैसे ले सकता हूं और केवल अनन्य लाइनों को रख सकता हूं?

apple 
pear 
lemon 
lemon 
pear 
orange 
lemon 

मैं इसे कैसे कर सकता हूँ ताकि मैं केवल अद्वितीय लाइनों रखने के लिए, तो मैं मिलता है:

apple 
pear 
lemon 
orange 

मैं मूल फ़ाइल को संशोधित करने या बना सकते हैं एक नया।

मुझे लगता है कि मूल फ़ाइल को एक समय में एक पंक्ति को स्कैन करने का एक तरीका है, जांचें कि लाइन नई फ़ाइल में मौजूद है या नहीं, और फिर यदि यह नहीं है तो संलग्न करें। मैं यहां वास्तव में बड़ी फाइलों से निपट नहीं रहा हूं।

उत्तर

10
@echo off 
setlocal disabledelayedexpansion 
set "prev=" 
for /f "delims=" %%F in ('sort uniqinput.txt') do (
    set "curr=%%F" 
    setlocal enabledelayedexpansion 
    if "!prev!" neq "!curr!" echo !curr! 
    endlocal 
    set "prev=%%F" 
) 

यह क्या करता है: इनपुट सॉर्ट करता पहले, और फिर चला जाता है हालांकि यह क्रमिक रूप से और आउटपुट वर्तमान पंक्ति पिछले करने के लिए अलग है केवल अगर एक। यदि विशेष वर्णों को संभालने की आवश्यकता नहीं है तो यह भी आसान हो सकता था (यही कारण है कि उन setlocal/endlocal के लिए हैं)।
यह सिर्फ stdout लिए लाइनों गूँज, यदि आप फाइल करने के लिए करते हैं (यह मानते हुए आप अपने बैच myUniq.bat नाम) लिखना चाहते myUniq >>output.txt

+0

बहुत बढ़िया, धन्यवाद! मैंने प्रत्येक पंक्ति में 'echo ... >> myUniq.bat' लिखना समाप्त कर दिया,' myUniq' चलाया, फिर इसे हटा दिया, सब एक बार में। – Kache

+2

@ कैश ग्लेड मैं मदद कर सकता था। यदि आप 'पावरहेल' के लिए खुले हैं, तो आप सरल 1 लाइनर का भी उपयोग कर सकते हैं: (unsorted) 'gc uniqinput.txt | select -unique' या (sorted)' gc uniqinput.txt | sort | unique' – wmz

+0

धन्यवाद, लेकिन नहीं ऐसी फाइल 0000 \ n1111 \ n2222 \ n के लिए काम करता है। (\ n - असली सीआरएलएफ) बस 1111 और 2222 प्रिंट करता है। शायद 0000 का मतलब बैच के लिए कुछ विशिष्ट है। वैसे भी- कृपया मेरा वोट लें :) – user1503944

2

अतिरिक्त कार्यक्रम के बिना कमांड लाइन से ऐसा करने का कोई आसान तरीका नहीं है।

uniq जो भी आप चाहते हैं वह करेंगे।

या आप जीएनयू उपकरण प्राप्त करने के लिए CoreUtils for Windows डाउनलोड कर सकते हैं। फिर आप जो चाहते हैं उसे प्राप्त करने के लिए आप sort -u का उपयोग कर सकते हैं।

या तो उनमें से एक बैच फ़ाइल से कॉल करने योग्य होना चाहिए।

व्यक्तिगत रूप से, यदि आपको बहुत टेक्स्ट मैनिपुलेशन करने की आवश्यकता है तो मुझे लगता है कि आप Cygwin प्राप्त करने से बेहतर होंगे। तो फिर तुम sort, sed, awk, vim तक आसानी से पहुँचा, आदि होगा

-3

आप सॉर्ट कमान

जैसे

SORT test.txt उपयोग कर सकते हैं > Sorted.txt

+5

को ठीक करना चाहिए, नहीं, डुप्लिकेट – jeb

2

कमांड प्रॉम्प्ट से PowerShell चलाएं।

आइटम मान लिया जाये कि कर रहे हैं एक फ़ाइल कॉल fruits.txt में, निम्नलिखित अद्वितीय लाइनों uniques.txt में डाल देगा:

प्रकार fruits.txt | क्रमबद्ध-वस्तु अनोखा | बाहर फ़ाइल

uniques.txt
+0

को हटा नहीं देगा यह दृष्टिकोण बड़ी फ़ाइलों के लिए अच्छा नहीं है। 90 एमबी फ़ाइल के लिए यह 4 जीबी से अधिक रैम का इस्तेमाल करता था और इसे पूरा करने में बहुत लंबा समय लगा। –

-1

मैंने कमांड प्रॉम्प्ट से पावरहेल का भी उपयोग किया, जिसमें मेरी टेक्स्ट फ़ाइल स्थित है, और फिर मैंने बिल्ली कमांड, सॉर्ट कमांड और गेट-अनन्य सेमीडलेट का उपयोग किया, जैसा कि http://blogs.technet.com/b/heyscriptingguy/archive/2012/01/15/use-powershell-to-choose-unique-objects-from-a-sorted-list.aspx पर बताया गया है।

यह इस तरह देखा:

PS C:\Users\username\Documents\VDI> cat .\cde-smb-incxxxxxxxx.txt | sort | Get-Unique > .\cde-smb-incxxxxxxx-sorted.txt 
-1

उपयोग जीएनयू तरह उपयोगिता:

sort -u file.txt 

आप Windows पर और Git का उपयोग कर रहे हैं, तो तरह और कई और अधिक उपयोगी उपयोगिताओं पहले से ही यहां हैं: सी: \ प्रोग्राम फ़ाइलें \ गीट \ usr \ bin \

बस इस पथ को अपने% PATH% पर्यावरण चर में जोड़ें।

+0

@ embedded.kyle के उत्तर का डुप्लिकेट – SteveFest

संबंधित मुद्दे

 संबंधित मुद्दे