मैं हर N लाइनों के बाद नई लाइन डालने के लिए टेक्स्ट-प्रोसेसिंग टूल्स का उपयोग कैसे कर सकता हूं?
N = 2 के लिए उदाहरण:
इनपुट:
sadf
asdf
yxcv
cxv
eqrt
asdf
उत्पादन:
sadf
asdf
yxcv
cxv
eqrt
asdf
मैं हर N लाइनों के बाद नई लाइन डालने के लिए टेक्स्ट-प्रोसेसिंग टूल्स का उपयोग कैसे कर सकता हूं?
N = 2 के लिए उदाहरण:
इनपुट:
sadf
asdf
yxcv
cxv
eqrt
asdf
उत्पादन:
sadf
asdf
yxcv
cxv
eqrt
asdf
जवाबों:
के साथ awk
:
awk ' {print;} NR % 2 == 0 { print ""; }' inputfile
साथ sed
( GNU
विस्तार):
sed '0~2 a\\' inputfile
के साथ bash
:
#!/bin/bash
lines=0
while IFS= read -r line
do
printf '%s\n' "${line}"
((lines++ % 2)) && echo
done < "$1"
sed '0~2 a\ '
प्रत्येक सम्मिलित न्यूलाइन में एक स्थान जोड़ता है। आप इन इसी तरह काम की प्रत्येक पंक्ति के बाद एक नई पंक्ति जोड़ने के लिए, किसी भी चाहता था, तो: sed '0~1 a\ '
, sed 'a\ '
, या बस sed G
।
sed n\;G <infile
... आपको जो चाहिए वह यह है ...
उदाहरण के लिए:
seq 6 | sed n\;G
1
2
3
4
5
6
... (और एक रिक्त 6 का अनुसरण करता है) ... या ...
seq 5 | sed n\;G
1
2
3
4
5
(और कोई रिक्त 5 का अनुसरण नहीं करता है)
यदि रिक्त को हमेशा अंतिम पंक्ति में छोड़ा जाना चाहिए:
sed 'n;$!G' <infile
एक और अजीब स्वाद:
awk '{ l=$0; getline; printf("%s\n%s\n\n", l, $0) }'
(GNU) के साथ sed
:
sed '0~2G'
लघु (एन = 100 के लिए बदसूरत):
sed 'n;G'
आदमी सेड बताते हैं ~
पहला ~ चरण पहले चरण
के साथ शुरू होने वाली हर step'th लाइन से मेल खाता है। उदाहरण के लिए, `` sed -n 1 ~ 2p '' इनपुट स्ट्रीम में सभी विषम-संख्या वाली पंक्तियों को प्रिंट करेगा, और 2 ~ 5 पता हर पाँचवीं पंक्ति से मेल खाएगा, दूसरे से शुरू होगा। पहले शून्य हो सकता है; इस मामले में, sed संचालित होता है जैसे कि यह कदम के बराबर था। (यह एक विस्तार है।)
अन्य सेड के साथ (नई लाइनें गिनें):
sed -e 'p;s/.*//;H;x;/\n\{2\}/{g;p};x;d'
या, अधिक पोर्टेबल होने के लिए, के रूप में लिखा (सेड के कुछ संस्करणों के लिए टिप्पणियां हटाएं):
sed -e ' # Start a sed script.
p # Whatever happens later, print the line.
s/.*// # Clean the pattern space.
H # Add **one** newline to hold space.
x # Get the hold space to examine it, now is empty.
/\n\{2\}/{ # Test if there are 2 new lines counted.
g # Erase the newline count.
p # Print an additional new line.
} # End the test.
x # match the `x` done above.
d # don't print anything else. Re-start.
' # End sed script.
के साथ awk
, शायद:
awk '1 ; NR%2==0 {printf"\n"} '
[[ ]]
परीक्षण की कोई आवश्यकता नहीं हैwhile read line; do echo "$line"; ((lines++ % 2)) && echo; done
:।