दो से फाइल में समूह लाइनों को कैसे करें?


9

मेरे पास इस तरह एक पाठ फ़ाइल है:

a
b
c
d
e
f
g

मैं इस तरह से आउटपुट प्राप्त करने के लिए उन पंक्तियों को कैसे समूहित कर सकता हूँ:

a-b
b-c
c-d
d-e
e-f
f-g

मुझे यह शेल (श, सीएचएस, बाश) में करना है।

मुझे यह मिल गया है:

cat file | xargs -n2

लेकिन पहले समूह का अंतिम तत्व दूसरे का पहला नहीं बना।

जवाबों:


9

के साथ awk:

awk 'NR!=1{print x"-"$0}{x=$0}' file
  • NR!=1 पहले वाले को छोड़कर सभी लाइन पर लागू होता है
  • print x"-"$0 बीच में डैश के साथ मान प्रिंट करें
  • x=$0सेट x(अगले पुनरावृत्ति के लिए)

5

POSIX के साथ sed:

sed '1{
  h
  d
}
H
x
s/\n/-/
' <file

या एक-लाइनर संस्करण:

sed -e '1{h;d' -e\} -e 'H;x;s/\n/-/' <file

मुझे पहली पंक्ति में अंतिम होने के लिए दूसरी पंक्ति के पहले अक्षर की आवश्यकता है ...
कॉस्टेल बाल्टा-कोमन

होल्ड स्पेस का अच्छा उपयोग।
वाइल्डकार्ड

हाँ, ठीक है।
मिकसेर्व

क्या आप बता सकते हैं कि यह कैसे काम करता है?
Yossarian

5
paste -d- - ./infile <infile

^ यह वास्तव में अच्छी तरह से काम करेगा, सिवाय इसके कि आपका इनपुट बंद है। इसलिए...

{ echo; cat <infile; } | paste -d- - ./infile | sed '1d;$d'

... काम होगा, लेकिन शायद बहुत जटिल है ...


ठीक है, यह वही है जो ओपी आवश्यकता को गलत पढ़ने के बाद पहली बार मेरे दिमाग में आया था, लेकिन मैंने sedइसे अकेले करने का फैसला किया ।
कोउंगलम

@cuonglm - क्या मैंने इसे गलत बताया?
मिकसेर्व

1
नहीं, मैं शर्त लगाता हूं। लेकिन आपको sed 1d\;\$dइसे सही करने की आवश्यकता है।
कोउंगलम

इस संस्करण के बारे में कैसे? sed '2~2p' infile | paste -d- - -
इस्पातधर

1
अब मैं देखता हूॅं। paste -d- <(head -n -1 input) <(tail -n +2 input)
कोस्टास

2

एक और sed

sed '$!N;s/\n/-/p;s/-/\n/;D' <input

और संशोधित किया जा सकता है ( mikeserv के लिए धन्यवाद ):

sed -n 'N;y/\n/-/;P;y/-/\n/;D' <input

1
y/-\n/\n-/शायद दोनों s /// को बदल सकता है। अगर यह किया है कि यह तेज, \ n उपयोग के लिए पोर्टेबल और छोटा होगा।
mikeserv

1

एक शुद्ध बैश संस्करण -

old=""; while read -r line ; do [[ -n "$old" ]] && echo   $old-$line;   old=$line; done  < input

a-b
b-c
c-d
d-e
e-f
f-g
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.