हर N लाइनों के बाद एक नई लाइन डालें?


24

मैं हर N लाइनों के बाद नई लाइन डालने के लिए टेक्स्ट-प्रोसेसिंग टूल्स का उपयोग कैसे कर सकता हूं?

N = 2 के लिए उदाहरण:

इनपुट:

sadf
asdf
yxcv
cxv
eqrt
asdf

उत्पादन:

sadf
asdf

yxcv
cxv

eqrt
asdf

जवाबों:


28

के साथ 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"

2
अंकगणित मूल्यांकन को सीधे स्थिति के रूप में उपयोग किया जा सकता है, [[ ]]परीक्षण की कोई आवश्यकता नहीं है while read line; do echo "$line"; ((lines++ % 2)) && echo; done:।
मैनटवर्क

1
ज्ञात हो कि उपरोक्त प्रलेखित कमांड sed '0~2 a\ 'प्रत्येक सम्मिलित न्यूलाइन में एक स्थान जोड़ता है। आप इन इसी तरह काम की प्रत्येक पंक्ति के बाद एक नई पंक्ति जोड़ने के लिए, किसी भी चाहता था, तो: sed '0~1 a\ ', sed 'a\ ', या बस sed G
एक्यूमेनस


4
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

2

एक और अजीब स्वाद:

awk '{ l=$0; getline; printf("%s\n%s\n\n", l, $0) }'

1
"यह उत्तर इसकी लंबाई और सामग्री के कारण निम्न-गुणवत्ता के रूप में चिह्नित किया गया था।" मैं इसे स्वीकार कर
लूंगा

1

सेड (GNU)

(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, शायद:

awk '1 ; NR%2==0 {printf"\n"} '
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.