मैं किसी टेक्स्ट फ़ाइल की प्रत्येक पंक्ति के लिए एक पंक्ति संख्या और टैब को कैसे प्रस्तुत कर सकता हूं?


45

मैं टेक्स्ट फ़ाइल की प्रत्येक पंक्ति की शुरुआत में एक पंक्ति संख्या और टैब कैसे जोड़ सकता हूं?


मैं क्या सोच रहा हूँ कि आप इसे विंडोज पर कैसे करेंगे ...
जूल

4
क्या यह स्टैकओवरफ्लो पर होना चाहिए? सुपरयुसर के लिए उत्तर नोटपैड और बहुत धैर्य है।
कोकोस

2
तो, क्या आप प्रीपेन्ड या एपेंड करना चाहते हैं। आपका शीर्षक और शरीर ग्रंथों अलग हैं;)
matpie

मुझे लगता है कि मैं शुरुआत में संलग्न करना चाहता हूं , "प्रीपेंड" केवल हैकर्स के लिए एक शब्द है।
रिचर्ड हॉकिंस

विंडोज पर, किसी भी अन्य प्रोग्रामिंग-ईश प्रश्न के साथ, आप Cygwin स्थापित कर सकते हैं और फिर नीचे दिए गए उत्तरों का उपयोग कर सकते हैं।
जोनाथन हार्टले

जवाबों:


49
awk '{printf "%d\t%s\n", NR, $0}' < filename

10
या awk '{print NR, "\t", $0}'
jtbandes

1
उत्तर के साथ, कमांड कमांड लाइन के साथ, बहुत सरल समाधान है।
डैनियल रिबेरो

2
@DanielRibeiro सरल लेकिन कम विश्वसनीय और कम लचीला।
जोनाथन हार्टले

@DanielRibeiro का उपयोग कर जवाब nlभी गलत है। स्रोत कोड में, यह आपको कभी भी सही लाइन नंबर नहीं देगा, क्योंकि यह केवल व्हाट्सएप के साथ लाइनों की गणना नहीं करता है।
ऑलिगॉफ्रेन

@jtbandes आपका समाधान लाइन नंबर और टैब के बीच रिक्त स्थान जोड़ता है (कम से कम मेरे मैक पर)
Yossi Vainshtein

55

Nl कमांड को यह करना चाहिए, लेकिन यह लाइन नंबर से पहले भी स्थान जोड़ता है। यह लिनक्स कोर्यूटिल्स का हिस्सा है।

nl lines.txt
 1  $bkWTN
 2  $cV8$.

4
दरअसल, आप nlसंख्या से पहले अंतरिक्ष को छोड़ना बता सकते हैं । बस -w1एक नंबर के लिए न्यूनतम चौड़ाई बताने के लिए विकल्प का उपयोग करें 1.
cjm

2
इस बात से सावधान रहें कि 'nl' डिफ़ॉल्ट रूप से मानता है कि हेडर और फ़ुटर्स के साथ आपका टेक्स्ट 'पेज' में विभाजित है, सभी को '\:' या '\: \:' या '\ _: \:' जैसी लाइनों द्वारा सीमांकित किया गया है। यदि आपके टेक्स्ट में इस तरह की कोई रेखाएँ हैं, तो 'nl' अप्रत्याशित परिणाम देगा, जैसे कि उन पंक्तियों को निगलना, बिना नंबर वाले सेक्शन, या सेक्शन में नंबरिंग को फिर से शुरू करना। Use -dXY (जहां XY वर्णों की एक जोड़ी है जो आपके पाठ में स्वयं द्वारा एक पंक्ति में नहीं होती है) इस व्यवहार को रोकने के लिए। सामान्य स्थिति में, यह भविष्यवाणी करना कठिन हो सकता है, इसलिए मैं इस पृष्ठ पर अन्य समाधानों में से एक का उपयोग करने की सलाह दूंगा।
जोनाथन हार्टले

'-W1' का उपयोग न केवल संख्याओं के बाद की जगह को हटा देगा, बल्कि लाइन नंबरों को केवल एक वर्ण चौड़ा करने के लिए छोटा कर देगा , जिसका अर्थ है कि आपकी लाइनें संख्या केवल उनके कम से कम महत्वपूर्ण अंक प्रदर्शित करती हैं। यह लगभग निश्चित रूप से नहीं है कि आप क्या चाहते हैं।
जोनाथन हार्टले

4
साथ -nlnआप कर सकते हैं बाएं औचित्य साबित आप लाइन नंबर से पहले अंतरिक्ष (रों) नहीं करना चाहते हैं। इसके अलावा, एक टैब विभाजक निर्दिष्ट करने के लिए जिसका आप उपयोग कर सकते हैं -s$'\t'या -s' '( ctrl+vतब के साथ एकल उद्धरणों के बीच एक टैब डालें tab)।
दान_क्रांति

2
@ जोनाथनहार्टले nl -w1(जीएनयू कोर्यूटिल्स 8.24 से) लाइन नंबरों को कम नहीं करता है ।
स्किप्पी ले ग्रांड गौरौ

10
sed = test.txt | sed 'N;s/\n/\t/'

कमांड "sed =" लाइन नंबर प्रिंट करेगा जिसके बाद एक गाड़ी वापसी और फिर अगली लाइन होगी।

अभिव्यक्ति "N; s / \ n / \ t /" प्रत्येक पंक्ति को ले जाएगी, अगली पंक्ति (यानी लाइन नंबर और लाइन) प्राप्त करेगी, और एक टैब के साथ गाड़ी वापसी को प्रतिस्थापित करेगी।


प्रिंट के मेरे संस्करण के साथ कोई टैब के साथ एक "टी" प्रिंट करता है: 8t मैंने अपनी पीढ़ी के सर्वश्रेष्ठ दिमागों को 9t पागलपन से नष्ट कर दिया, हिस्टीरिकल नग्न भूखा देखा,
रिचर्ड हॉकिंस

1
ध्यान दें कि \nलाइन फ़ीड (आमतौर पर इसे सिर्फ "न्यूलाइन" कहा जाता है, क्योंकि इसका पहला व्यापक उपयोग यूनिक्स में था), और \rकैरिज रिटर्न है। Windows का उपयोग करता है \r\n(के रूप में भी जाना जाता है CRLF)।
कैमिलो मार्टिन

(याय नाइटपिटिंग!)
कैमिलो मार्टिन

यदि हम इस बारे में जानकारी प्राप्त करने जा रहे हैं कि विंडोज़ कैसे भिन्न हो सकती है, तो हमें UTF16 पर विचार करने की आवश्यकता हो सकती है।
mc0e

4
cat -n <yourfile> | perl -pe "s/^\s*(\d+)\s+/\1\t/"

कैट-एन लिनेनटर्स को "123 लिनेकॉन्टेंट" के रूप में जोड़ता है और रेगेक्सपी इसे "लिननम्बरटब्लिनकॉन्टेंट्स" में बदल देता है।



2

कैसा रहेगा

cat -n somefile.txt

?


1
कोई टैब नहीं। (टिप्पणियाँ 15 वर्णों की आवश्यकता होती है एक बेवकूफ आवश्यकता है।)
रिचर्ड हॉकिंस

1
यह मेरे सिस्टम पर टैब उत्पन्न करता है। बिल्ली (GNU Coreutils) 6.10।
इन्नाम

मेरे सिस्टम पर, यह (टैब) नंबर (स्पेस) लाइन जोड़ता है। बीएसडी बर्तन।
रिचर्ड हॉकिंस

2

ठीक है, यहाँ एक लाइन बैश समाधान है:

$ IFS=$'\n';x=1;for l in $(<file.txt);do echo -e "$x\t$l";((x+=1));done
$ IFS=

पहली IFS सेटिंग एक समय में पूरी लाइन पढ़ने के लिए बैश बताती है। दूसरी पंक्ति डिफ़ॉल्ट रूप से IFS को रीसेट करती है।

अतिरिक्त बोनस के रूप में, यह आपके शेल में पूरी तरह से चलता है और किसी प्रोग्राम को निष्पादित नहीं करता है!


1

ठीक है, चूंकि हम ऐसा करने के तरीके एकत्र कर रहे हैं,

 grep -n . file.txt | sed 's/\(^[0-9]*\):/\1    /g'
 # this is a tab with Ctrl-V + Tab  =====>  ---- 

अब मैं यह देखता हूं। ठीक है, मेरी अपनी पोस्ट को हटा दें। क्या? आप कहते हैं कि SU आपको अपनी स्वयं की पोस्ट हटाने नहीं देता है?
केविन एम।

grep + sed == awk
Tadeusz A. Kadłubowski

1
sed file.txt -e 's/^/\t/' | cat -n | sed -e 's/^\t//'

या कुछ गैर-जीएनयू sedएस के लिए:

cat file.txt | sed -e 's/^/\\t/' | cat -n | sed -e 's/^\\t//'

मेरे "sed" संस्करण के साथ कोई टैब नहीं है।
रिचर्ड हॉकिंस

डबल-भागने के लिए संपादित; इसे ऐसे ही आजमाएं।
अराजकता

यदि बाकी सब विफल रहता है, तो बस टैब मारा जाए। :) (या ^ V टैब यदि आपका शेल आपको इससे परेशान करता है।)
अराजकता

sed: 1: "test.txt": अपरिभाषित लेबल 'est.txt'
रिचर्ड

'cat test.txt | sed -e 's / ^ / \\ t /' | कैट-एन 'प्रिंट (टैब) नंबर (स्पेस) \ t (लाइन)
रिचर्ड होकिंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.