विंडोज 'टेल' कमांड के बराबर है


107

क्या विंडोज कमांड लाइन पर * निक्स टेल कमांड को अनुकरण करने का एक तरीका है ? मेरे पास एक फाइल है और मुझे पाठ की पहली n पंक्तियों को हटाने का तरीका चाहिए । उदाहरण के लिए:

D:\>type file.txt
line one
line two
line three
D:\>*[call to tail]* > result.txt

D:\>type result.txt
line two
line three

10
उन्हें छोड़ने के बजाय headकेवल पहली n लाइनें नहीं दिखाता है?
जॉय

कृपया क्रिस 2009 के बाद से नए उत्तरों पर विचार करें, विशेष रूप से अमित पोर्टनॉय के उत्तर पर । जैसा कि आपका प्रश्न सामान्य है, कई उपयोगकर्ता इस वेब पेज को पा सकते हैं। और वे पहले एक के बाद जवाब पढ़ना बंद कर सकते हैं: आपने जो उत्तर स्वीकार किया है। आप उन उत्तरों को बदल सकते हैं जिन्हें आपने आजकल की संभावनाओं के लिए एक और अपडेट के लिए स्वीकार कर लिया है। चीयर्स;)
ओलिब्रे

मैं एक उलझन में हूँ। मूल प्रश्न यूनिक्स शैली headकमांड के बारे में था , लेकिन वांछित आउटपुट ऐसा दिखता था जैसे वह चाहता था tail। ऐसा लगता है कि उत्तर के बारे में हैं headऔर नहीं tail
ब्लेकफ्ट

@blakeoft मूल प्रश्न के व्यवहार के लिए पूछ रहा था tail, हालांकि शीर्षक ने कहाhead
एमएम

जवाबों:


89

कोई सटीक समकक्ष नहीं। हालाँकि, वहाँ एक देशी DOS कमांड "अधिक" मौजूद है, जिसमें एक + n विकल्प है जो nth लाइन के बाद फाइल को आउटपुट देना शुरू कर देगा:

डॉस प्रॉम्प्ट:

C:\>more +2 myfile.txt

उपरोक्त कमांड पहले 2 लाइनों के बाद सब कुछ आउटपुट करेगा।
यह वास्तव में यूनिक्स प्रमुख का विलोम है :

यूनिक्स कंसोल:

root@server:~$ head -2 myfile.txt

उपरोक्त कमांड फ़ाइल की केवल पहली 2 पंक्तियों को प्रिंट करेगा।


8
नहीं, ऐसा नहीं है। tailफ़ाइल के अंत से गिनती शुरू होती है। तो, tail -2अंतिम दो पंक्तियों को प्रिंट करेगा।
ADTC

5
क्या मैं पहले n अक्षर भी प्रिंट कर सकता हूं?
क्वर्टी

@ADTC (मेरे संस्करण का) पूंछ सहायक का समर्थन नहीं करता है। केवल सिर करता है (gnuwin32)
nl-x

@ nl-x -2एक नकारात्मक नहीं है। यह -n 2(लाइनों की संख्या) का केवल एक छोटा संस्करण है । दुर्भाग्य से, अभी तक बहुत सारे कार्यान्वयन tailसमर्थन नहीं करते हैं -2, जो इसे headलागू करने के साथ बहुत असंगत बनाते हैं। इसने मुझे एक बार बहुत परेशान किया है।
ADTC

@ADTC आह क्षमा करें। मैं उलझन में था कि किससे head -n -2अलग हूं head -n 2। लेकिन पूंछ के साथ, बाद मौजूद नहीं है।
nl-x

111

यदि आपके पास Windows PowerShell स्थापित है (मुझे लगता है कि यह XP से शामिल है) तो आप बस cmd.exe से चला सकते हैं:

प्रमुख आदेश:

powershell -command "& {Get-Content *filename* -TotalCount *n*}"

टेल कमांड:

powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"

या, सीधे PowerShell से:

Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*


अपडेट करें

PowerShell 3.0 (विंडोज 8 और उच्चतर) ने Tailउपनाम के साथ जोड़ा LastHeadऔर Firstउपनाम TotalCountभी जोड़े गए थे।

इसलिए, कमांड को फिर से लिखा जा सकता है

Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*

क्या यह headबदले की तरह व्यवहार नहीं करता है tail?
ब्लेकॉफ्ट

@blakeoft हाँ, यह किया है ... मैंने अपना जवाब अपडेट कर दिया है। यह आश्चर्यजनक है कि किसी ने इस पर टिप्पणी करने से पहले 2 साल और 17 वोट लिए।
अमित पोर्टनॉय

@blakeoft को सिर्फ एहसास हुआ कि सवाल संपादित किया गया था! (देखें stackoverflow.com/posts/1295068/revisions)। इसने मूल रूप से हेड कमांड के लिए कहा ... दोनों उत्तरों को शामिल करने के लिए अपडेट किया गया ...
अमित पोर्टनॉय

2
@AmitPortnoy मुझे इस स्टैक एक्सचेंज पर कहीं और एक जवाब मिला, जिसमें कहा गया है कि Get-Contentअब एक टेल कमांड है। उदाहरण के लिए, Get-content -Tail 5 file.txtfile.txt की अंतिम पाँच पंक्तियों को प्रिंट करेगा। अपना उत्तर btw अद्यतन करने के लिए धन्यवाद।
ब्लेकफ़्ट

2
किसी भी तरह से इसे एक फिल्टर के रूप में उपयोग करने के लिए? (उदा। फ़ाइल के बजाय
स्टडिन

24
more /e filename.txt P n

जहाँ n = प्रदर्शित करने के लिए पंक्तियों की संख्या। तेजी से काम करता है और बिल्कुल headकमांड की तरह होता है ।


14
पी, एस, आदि जैसे कमांड केवल उपयोगकर्ता द्वारा प्रॉम्प्ट पर इनपुट किए जा सकते हैं। उन्हें अधिक आदेश तक पारित नहीं किया जा सकता है। इस प्रकार, ऊपर दिया गया उदाहरण काम नहीं करता है
फिलाबर्ट पेरुसे जुएल


12

यह कुल हैक है, लेकिन अगर यह एक बड़ी फाइल है जिसे आप केवल प्रारूप, हेडर आदि की जांच करना चाहते हैं और आप एक ऐसे समाधान की तलाश कर रहे हैं जो आप हमेशा एक नई फाइल और CTRL-C के लिए 'अधिक' आउटपुट को पुनर्निर्देशित कर सकते हैं। जल्दी से। आउटपुट पंक्तियों को ठीक से नियंत्रित नहीं किया जा सकता है और आप सबसे अधिक संभावना इसे आउटपुट लाइन के बीच में मार देंगे, लेकिन यह अन्यथा अनुपयोगी फ़ाइल के एक छोटे से हिस्से को हथियाने का एक सस्ता तरीका है।

पूर्व।

C: \ more test.csv> test.txt 
^ C C: \ more test.txt
लाइन 1
लाइन 2
आदि ...... सी:\

9

खैर, यह होगा करना यह है, लेकिन इसके बारे में जितनी जल्दी के रूप में यह लग रहा है (मोटे तौर पर O (n * मी), जहां n प्रदर्शन और मीटर पंक्तियों की संख्या फ़ाइल में लाइनों की कुल संख्या है है):

for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" filename ^| findstr /r "^%l:"') do @echo %b

जहां "10" उन पंक्तियों की संख्या है जिन्हें आप प्रिंट करना चाहते हैं, और "फ़ाइल का नाम" फ़ाइल का नाम है।


6
एक समाधान के लिए +1 जो आपको पोर्ट डाउनलोड करने की तुलना में टाइप करने में अधिक समय लेता है head
कैमिलो मार्टिन

1
नोट: इस एक्सप्रेशन को कोष्ठक में रखें - (expr) > out.txt- परिणाम को फाइल में भेजते समय, या आपको केवल अंतिम पंक्ति मिलेगी। या अपेंड - expr >> out.txt
cz


7

अधिक + n का उपयोग करते समय, जो मैट पहले से ही उल्लेख किया गया है, लंबी फ़ाइलों में ठहराव से बचने के लिए, यह प्रयास करें:

अधिक +1 myfile.txt> con

जब आप आउटपुट को अधिक से अनुप्रेषित करते हैं, तो यह विराम नहीं देता है - और यहां आप कंसोल पर रीडायरेक्ट करते हैं। आप इसी तरह से किसी अन्य फ़ाइल को रीडायरेक्ट कर सकते हैं जैसे कि w / o के रुके होने पर यदि आपका वांछित अंतिम परिणाम है। फ़ाइल में रीडायरेक्ट करने के लिए> इसका उपयोग करें और इसे पहले से मौजूद होने पर इसे अधिलेखित कर दें या किसी मौजूदा फ़ाइल में संलग्न करें। (चुनाव के लिए पुनर्निर्देशित करने के लिए या तो उपयोग कर सकते हैं।)



5

Get-content -Tail n file.txtशक्तियां केवल एक चीज है जो tailलिनक्स में करीब आती है ।

Get-Content *filename* | Select-Object -last *n*लोड ऊपर सुझाव / पूरी बात पार्स। कहने की जरूरत नहीं है, यह मेरी 10GB लॉग फ़ाइल से खुश नहीं था ... -Tailविकल्प फ़ाइल के अंत तक शुरू होता है।


2

यदि आप हेड कमांड चाहते हैं, तो इसे प्राप्त करने का एक आसान तरीका सिगविन स्थापित करना है। तब आपके पास अपने निपटान में सभी UNIX उपकरण होंगे।

यदि यह एक अच्छा समाधान नहीं है, तो आप अंतः-पंक्ति के संकेतक के लिए खोज का उपयोग करके खोज कर सकते हैं।

MSDN पर खोज: http://technet.microsoft.com/en-us/library/bb490907.aspx


2

यहां एक तेज़ देशी हेड कमांड है जो आपको डॉस में पहली 9 लाइनें देता है।

findstr /n "." myfile.txt | findstr "^.:"

प्रत्येक लाइन पर पहले 2 अक्षर लाइन नंबर होंगे।


2

एक संसाधन किट है जिसे यहाँ से डाउनलोड किया जा सकता है: http://www.microsoft.com/downloads/en/confirmation.aspx?familyId=9d467a69-57ff-4ae7-96ee-b18cb9090cffd&displayLang=en

इसमें एक टेल। टूल है, लेकिन यह केवल कुछ विंडोज संस्करणों के साथ ही संगत है

(इस पोस्ट से कॉपी किया गया: विंडोज़ के लिए टेल कमांड )


2

PS में कमांड का उपयोग करने का प्रयास करें:

Select -Last 1

इस कमांड को पाइपलाइन भी किया जा सकता है।

पहली पंक्ति प्राप्त करने के लिए उदाहरण:

type .\out.txt | Select -Last 1

या पहली पंक्ति प्राप्त करने के लिए:

 type .\out.txt | Select -First 1

1

FWIW, उन लोगों के लिए जो फ़ाइल के सिर से रिकॉर्ड की एक अनिश्चित संख्या को छीनना चाहते हैं, अधिक> अच्छी तरह से काम करता है। यह उपयोगी है कि कुछ विकसित करने के शुरुआती चरणों में काम करने के लिए एक छोटी फ़ाइल हो।


1

मैंने कोई श्रेणी निकालने की कोशिश नहीं की है, लेकिन मैं निम्नलिखित डॉस कमांड का उपयोग करके एक लाइन प्राप्त करने में सक्षम था:

find /N " " *.log|find "[6]" 

चूंकि अधिकांश फ़ाइलों में रिक्त स्थान होते हैं, इसलिए यह कमांड सभी लॉग फ़ाइलों से प्रत्येक पंक्ति को खींचती है और मूल रूप से उन्हें प्रत्येक फ़ाइल के लिए 1 से शुरू होती है। गिने हुए परिणाम को फिर दूसरी FINDकमांड में डाला जाता है, जो नंबर 6 के रूप में टैग की गई लाइन के लिए दिखता है।


1

इस पृष्ठhead पर एक मुफ्त उपयोगिता है जिसका आप उपयोग कर सकते हैं। मैंने अभी तक इसकी कोशिश नहीं की है।


1
यकीन नहीं हो रहा था कि यह क्यों ठुकरा दिया गया। यह बिल्कुल UNIX हेड यूटिलिटी की तरह निष्पादित होता है
कॉसन

1
यह एक डाउनलोड लिंक है। क्या वह बाइनरी को uuencode करने और उत्तर में एम्बेड करने वाला है?
गर्गानुसुत

0
set /p line= < file.csv 
echo %line%

यह आपकी फ़ाइल की पहली पंक्ति को cmd Windows में चर% लाइन% में लौटाएगा।


0

एक समकालीन उत्तर के रूप में, यदि विंडोज 10 चल रहा है तो आप "विंडोज के लिए लिनक्स सबसिस्टम" का उपयोग कर सकते हैं।

https://docs.microsoft.com/en-us/windows/wsl/install-win10

यह आपको खिड़कियों के भीतर से देशी लिनक्स कमांड चलाने की अनुमति देगा और इस तरह से पूंछ को ठीक से चलाएगा कि आप लिनक्स में कैसे होंगे।


-2

मुझे नहीं लगता कि बॉक्स से बाहर का रास्ता है। डॉस में ऐसी कोई कमांड नहीं है और इसे (प्रमुख दर्द के बिना) सीमित करने के लिए बैच फाइलें सीमित हैं।


-2

चेतावनी, अज्ञात पाठ इनपुट पर टोकन, और डेलिम्स क्षमता के लिए बैच फ़ाइल का उपयोग करना, और;,;, <, आदि जैसे वर्णों की विशेष व्याख्या के कारण एक आपदा हो सकती है। इस तरह के तरीकों को केवल अनुमानित पाठ के लिए आरक्षित किया जाना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.