2008-09-26 11 views
7

मैं कुछ लॉग फ़ाइलों के माध्यम से पार्सिंग कर रहा हूं और मुझे पता चला है कि कुछ पंक्तियां एक पंक्ति पर प्रदर्शित होने में बहुत लंबी हैं, इसलिए टर्मिनल.एप कृपया उन्हें अगली पंक्ति पर लपेटें। हालांकि, मैं अक्षरों की एक निश्चित संख्या के बाद एक रेखा को छीनने का एक तरीका ढूंढ रहा हूं ताकि टर्मिनल लपेट न सके, जिससे पैटर्न पैटर्न को और अधिक आसान बना दिया जा सके।stdin लाइन लंबाई truncate?

मैं एक छोटे से पर्ल पटकथा लिखी यह करने के लिए:

#!/usr/bin/perl 

die("need max length\n") unless $#ARGV == 0; 

while (<STDIN>) 
{ 
    $_ = substr($_, 0, $ARGV[0]); 
    chomp($_); 
    print "$_\n"; 
} 

लेकिन मुझे लगता है कि इस कार्यक्षमता शायद कुछ अन्य उपकरणों में बनाया गया है है कि मैं सिर्फ करने के बारे में पर्याप्त जानकारी नहीं है (sed?) इस काम के लिए उपयोग करें।

तो मेरा प्रश्न एक रिवर्स प्रश्न का प्रकार है: मैं इसे करने के लिए प्रोग्राम लिखने के बिना stdin की एक पंक्ति को कैसे छोटा कर सकता हूं?

+0

इस 'संबंधित प्रोग्रामिंग नहीं' कैसी है? –

+0

बेशक यह प्रोग्रामिंग से संबंधित है।इसे बंद क्यों करें? –

+0

मुझे बस एक त्वरित और गंदे उत्तर की आवश्यकता है - मैंने इसे फिर से खोल दिया है इसलिए योगदान करने के लिए स्वतंत्र महसूस करें। इसका कारण यह नहीं था कि यह 'प्रोग्रामिंग से संबंधित' नहीं था क्योंकि यह एक कार्यक्रम के बदले एक कमांड लाइन उपकरण का उपयोग करना शामिल था। –

उत्तर

12

पाइप उत्पादन के लिए:

cut -b 1-LIMIT 

जहां सीमा वांछित लाइन चौड़ाई है।

+3

नोट: यह बाइट्स की गणना करेगा। चूंकि उसने पात्रों से पूछा, क्यों नहीं 'कट-सी'? – Turadg

11

एक और रणनीति जो मैं बहुत लंबी लाइनों के साथ लॉग फ़ाइलों को देखने के लिए उपयोग करता हूं, फ़ाइल को "कम-एस" पर पाइप करना है। कम के लिए -S विकल्प लपेटने के बिना लाइनों को मुद्रित करेगा, और आप दाएं तीर कुंजी दबाकर लंबी लाइनों के छिपे हिस्से को देख सकते हैं।

2

वास्तव में इस सवाल का जवाब नहीं, लेकिन अगर आप पर्ल के साथ चिपके रहते हैं और एक एक लाइनर का उपयोग करना चाहते, एक संभावना है:

$ perl -pe's/(?<=.{25}).*//' filename 

जहां 25 वांछित लाइन की लंबाई है।

+0

चालाक regex, लेकिन मैं प्रोग्रामेटिक समाधान से दूर जाने के लिए देख रहा था। –

0

होगा

perl -wlne'print substr($_,0,80)' 

golfed (5.10 के लिए) यह करने के लिए हमेशा की तरह:

perl -nE'say/(.{0,80})/' 

(, प्रोग्रामिंग के रूप में इसके बारे में मत सोचो एक कमांड लाइन का उपयोग कर के रूप में यह के बारे में सोच विकल्पों की एक बड़ी संख्या के साथ उपकरण।) (हाँ, python संदर्भ जानबूझकर है।)

0

एक कॉर्न खोल समाधान (70 वर्णों को छंटनी - हालांकि पैरामीटर को आसान बनाना):

typeset -L70 line 
while read line 
do 
    print $line 
done 
0

आप एक बंधे चर कि एक निश्चित लंबाई के लिए क्लिप इसकी सामग्री का उपयोग कर सकते हैं:

#! /usr/bin/perl -w 

use strict; 
use warnings 
use String::FixedLen; 

tie my $str, 'String::FixedLen', 4; 

while (defined($str = <>)) { 
    chomp; 
    print "$str\n"; 
} 
0

यह ठीक नहीं है क्या आप के लिए पूछ रहे हैं, लेकिन GNU Screen (, अगर ओएस एक्स के साथ शामिल मैं सही ढंग से याद करता हूं, और अन्य * निक्स सिस्टम पर आम) आपको लाइन रैपिंग चालू/बंद (सीए आर और सीए सीआर) चालू करने देता है। इस तरह, आप स्क्रिप्ट के माध्यम से सामान को पाइप करने के बजाय बस अपने टर्मिनल का आकार बदल सकते हैं।

स्क्रीन मूल रूप से आपको "वर्चुअल" टर्मिनलों को एक अपूर्ण टर्मिनल एप्लिकेशन के भीतर देता है।

0
use strict; 
use warnings 
use String::FixedLen; 

tie my $str, 'String::FixedLen', 4; 

while (defined($str = <>)) { 
    chomp; 
    print "$str\n"; 
} 
0

जब तक मैं बात को अनदेखा कर रहा हूँ, यूनिक्स "गुना" कमांड वास्तव में ऐसा करने के लिए डिजाइन किया गया था:

$ cat file 
the quick brown fox jumped over the lazy dog's back 

$ fold -w20 file 
the quick brown fox 
jumped over the lazy 
dog's back 

$ fold -w10 file 
the quick 
brown fox 
jumped ove 
r the lazy 
dog's bac 
k 

$ fold -s -w10 file 
the quick 
brown fox 
jumped 
over the 
lazy 
dog's back 
+1

यह मूल रूप से जो मैं ढूंढ रहा था उसके विपरीत है। उदाहरण के लिए लॉग फ़ाइल की रेखाएं देखते समय, जब यह टेक्स्ट कई पंक्तियों पर लपेटा जाता है तो यह परेशान होता है। इस सवाल का उद्देश्य यह निर्धारित करना था कि आउटपुट लाइनों को कम करने का कोई तरीका था ताकि कोई लपेट न हो। आपके उदाहरण से, ऐसा लगता है कि गुना का कार्य * कारण * रेखाओं के लपेटना है। –

+0

आह, मैंने सोचा था कि आप लाइनों को लपेटने के तरीके से नाखुश थे, इस तथ्य से नहीं कि वे लपेट गए हैं। फिर कट समाधान सही है और यदि आप चाहें तो कट चौड़ाई के लिए स्वचालित रूप से COLUMNS चर सेट करने के लिए eval $ (ttype -s) का उपयोग कर सकते हैं। –

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