विकल्प 1 से 3 में कई व्हाट्सएप (लेकिन सरल हैं) के मुद्दे हैं। यही कारण है कि विकल्प 4 और 5 को विकसित करना है, जो बिना किसी समस्या के कई सफेद रिक्त स्थान को संसाधित करते हैं। बेशक, यदि विकल्प 4 या 5 का उपयोग किया जाता है, तो n=0
दोनों किसी भी प्रमुख व्हाट्सएप को संरक्षित करेंगे, n=0
जिसका अर्थ है कोई विभाजन नहीं।
विकल्प 1
एक सरल कटौती समाधान (एकल सीमांकक के साथ काम करता है):
$ echo '1 2 3 4 5 6 7 8' | cut -d' ' -f4-
4 5 6 7 8
विकल्प 2
एक अजीब री-कैल्क को मजबूर करना कभी-कभी समस्या को हल करता है (जोड़ा के कुछ संस्करणों के साथ काम करता है)
$ echo '1 2 3 4 5 6 7 8' | awk '{ $1=$2=$3="";$0=$0;} NF=NF'
4 5 6 7 8
विकल्प 3
प्रत्येक क्षेत्र के साथ तैयार मुद्रण printf
अधिक नियंत्रण देगा:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ for (i=n+1; i<=NF; i++){printf("%s%s",$i,i==NF?RS:OFS);} }'
4 5 6 7 8
हालाँकि, पिछले सभी उत्तर फ़ील्ड के बीच सभी FS को OFS में बदल देते हैं। चलो उस के समाधान के एक जोड़े का निर्माण।
विकल्प 4
खेतों और सीमांकक को हटाने के लिए उप के साथ एक लूप अधिक पोर्टेबल है, और FS के OFS में परिवर्तन को ट्रिगर नहीं करता है:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ for(i=1;i<=n;i++) { sub("^["FS"]*[^"FS"]+["FS"]+","",$0);} } 1 '
4 5 6 7 8
नोट: "^ [" "FS"] * "अग्रणी रिक्त स्थान के साथ एक इनपुट स्वीकार करना है।
विकल्प 5
एक समाधान का निर्माण करना काफी संभव है जो अतिरिक्त अग्रणी या अनुगामी व्हाट्सएप को नहीं जोड़ता है, और gensub
जीएनयू अवेक से फ़ंक्शन का उपयोग करके मौजूदा व्हाट्सएप को संरक्षित करता है:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ print gensub("["FS"]*([^"FS"]+["FS"]+){"n"}","",1); }'
4 5 6 7 8
यह भी एक क्षेत्र की सूची स्वैप करने के लिए इस्तेमाल किया जा सकता है एक गिनती दी n
:
$ echo ' 1 2 3 4 5 6 7 8 ' |
awk -v n=3 '{ a=gensub("["FS"]*([^"FS"]+["FS"]+){"n"}","",1);
b=gensub("^(.*)("a")","\\1",1);
print "|"a"|","!"b"!";
}'
|4 5 6 7 8 | ! 1 2 3 !
बेशक, ऐसे मामले में, ओएफएस का उपयोग लाइन के दोनों हिस्सों को अलग करने के लिए किया जाता है, और खेतों के पीछे की सफेद जगह अभी भी मुद्रित होती है।
नोट 1: ["FS"]*
इनपुट लाइन में अग्रणी स्थानों की अनुमति देने के लिए उपयोग किया जाता है।
cut -f3-
?