मेरे पास एक फ़ाइल है उदाहरण के लिए file.dat.gz जो टैब सीमांकित है।

उदाहरण के लिए

हाय ^ आईएपल ^ इटोस्ट

क्या डब्ल्यूसी का उपयोग कर टैब के बीच गिनना संभव है?

चूंकि उपरोक्त गणना 2, 5, 5 wc होगी 0 लौटाएगी लेकिन यदि यह 8000 से अधिक थी तो क्या यह 1 या सटीक मान सूचीबद्ध कर सकता है?

-3
I eat toast 23 मार्च 2020, 20:29
1
टैब के बीच क्या गिनें? "अगर यह बड़ा था" में "यह" क्या है? "सूची 1 या सटीक मान" से आपका क्या तात्पर्य है? क्या आप अपेक्षित आउटपुट दिखा सकते हैं?
 – 
Benjamin W.
23 मार्च 2020, 20:47
आह यह टैब के बीच के पात्रों को गिनता है। अनिवार्य रूप से मैं जो खोज रहा हूं वह यह है कि क्या दो टैब के बीच शब्द गणना करना संभव है? लेकिन समग्र लक्ष्य दो टैब के बीच एक शब्द गणना करना है जो 8000 . से अधिक के परिणाम को आउटपुट करता है
 – 
I eat toast
23 मार्च 2020, 21:26
इसलिए अपेक्षित आउटपुट एक कैरेक्टर ब्लॉब होगा जो 8*10^3 से अधिक है।
 – 
I eat toast
23 मार्च 2020, 21:27
1
दिखाएं कि आपने क्या प्रयास किया है और अपने प्रश्न में एक न्यूनतम प्रतिलिपि प्रस्तुत करने योग्य उदाहरण प्रदान करें
 – 
oguz ismail
23 मार्च 2020, 21:31

2 जवाब

wc की आवश्यकता नहीं है।

$IFS को अस्थायी रूप से एक read के आगे की लाइन पर एक टैब पर सेट करें।
यह रिक्त स्थान को बाहर कर देगा (c.f. "a b c")।
एक सरणी में पढ़ें, और प्रत्येक को लूप करें।

लंबाई> 8000 के लिए परीक्षण करें और उसके अनुसार व्यवहार करें। यहां एक त्वरित उदाहरण दिया गया है जिसे आपको अनुकूलित करने में सक्षम होना चाहिए।

 $: IFS="   " read -a lst < in
 $: for x in "${lst[@]}"
 >  do l="${#x}"
 >     if (( l > 8000 ))
 >     then x='<too long>'
 >     fi
 >     printf "'%s' = %d\n" "$x" "$l"
 >  done
 'hi' = 2
 'a b c' = 5
 'apple' = 5
 '<too long>' = 10000
 'toast' = 5

यदि आप किसी बड़ी फ़ाइल को संसाधित कर रहे हैं, तो बेहतर प्रदर्शन के लिए उसे awk या perl में लिखें।

0
Paul Hodges 23 मार्च 2020, 21:38
मेरे उदाहरण में मैं 10k x के क्षेत्र में फंस गया।
 – 
Paul Hodges
23 मार्च 2020, 21:39
 awk -F'\t' '{for (i=1; i<=NF;i++) if(length($i)>8000)  print $i}'

डेमो

$echo -e "hi\tapple\ttoast" |  awk -F'\t' '{for (i=1; i<=NF;i++) if(length($i)>2)  print $i}' 
apple
toast
$echo -e "hi\tapple\ttoast" |  awk -F'\t' '{print length($1) , length($2) , length($3)}' 
2 5 5
$echo -e "hi\tapple\ttoast"
hi  apple   toast
$echo -e "hi\tapple\ttoast" |  awk -F'\t' '{print length($1) , length($2) , length($3)}' 
2 5 5
$echo -e "hi\tapple\ttoast" |  awk -F'\t' '{for (i=1; i<=NF;i++) if(length($i)>2)  print $i}' 
apple
toast
$
0
Digvijay S 24 मार्च 2020, 10:03