2013-07-01 9 views
6

के साथ कॉलम का जटिल ट्रांसपोज़िंग मैंने शुद्ध this प्रश्न के लिए समाधान खोजने के लिए कुछ घंटों की कोशिश की। जाहिर है, दुर्भाग्य से मैं सफल नहीं हुआ था। वास्तव में एक मुश्किल सवाल है। शुद्ध sed


उदाहरण (awk सवाल से):

  • इनपुट:
 
aaa 111  
aaa 222 
aaa 333 
bbb 444 
bbb 555 
ccc 666 
  • उत्पादन:
 
aaa 111,222,333 
bbb 444,555 
ccc 666 

  • इनपुट
 
APM00065101435 189 
APM00065101435 190 
APM00065101435 191 
APM00065101435 390 
190104555 00C7 
190104555 00D1 
190104555 00E1 
190104555 0454 
190104555 0462 
APM00065101435 391 
APM00065101435 392 
  • उत्पादन
 
APM00065101435 189,190,191,390 
190104555 00C7,00D1,00E1,0454,0462 
APM00065101435 391,392 

क्या मैं कोशिश की है? मेरी गैर काम कर रहे कुछ उदाहरण:

 
sed -nr '1{h;b};H;x;/(\S+).*\n\1.*\'/M{x;b};s/.*\'//m;s/\n\S*\s*/,/g;s/,$//;p' file 
sed -nr '1{h;b};H;x;h;s/(\S+).*\n(\S+).*\'/\1\n\2/m;/(\S+)\n\1\'/M{$!b;g;bk};g;s/\n.*\'//m;:k;s/^\S+\s//2mg;s/\n/,/g;p;x;s/.*\n//;h;$l' file2 
sed -nr 'H;g;s/(\S+)\s.*/\1/gm;/(\S+)\n\1\'/M{$!b;g;bk};g;1d;s/\n.*\'//m;:k;s/\n\S+\s/,/2g;s/\n//;p;g;s/\n.*(\n.*)$/\1/;h' file2 

इस पढ़ने के लिए धन्यवाद।

+0

उह ... यह * संभव हो सकता है ... लेकिन मैं निश्चित रूप से यह समझने के लिए नहीं जा रहा हूं कि यह समय है या नहीं! आप एक शुद्ध sed समाधान क्यों चाहते हैं? यह समस्या अजीब के लिए एक तस्वीर है ... जीवन को अपने आप को कठिन क्यों बनाते हैं? –

+0

'awk' या' perl' में इसके लिए एक समाधान अधिक पठनीय, रखरखाव योग्य होगा और आपको यूनिकोरन्स का सपना दिखाएगा !! बस यूनिकॉर्न मैन के लिए ऐसा करें (या [पॉटोंग] तक प्रतीक्षा करें (http://stackoverflow.com/users/967492/potong) जागता है) !! –

उत्तर

5

यह (जीएनयू sed) आप के लिए काम कर सकते हैं:

sed -r ':a;$!N;s/^(([^ ]+).*)\n\2/\1,/;ta;P;D' file 

या यदि आप पसंद:

sed -r ':a;$!N;s/^((\S+\s).*)\n\2/\1,/;ta;P;D' file 

यह पैटर्न अंतरिक्ष में 2 लाइनों पढ़ता है, तुलना प्रत्येक पंक्ति के आरंभ और यदि वे वही हैं जो दूसरी पंक्ति की शुरुआत को प्रतिस्थापित करते हैं जो पहले कॉमा के साथ मेल खाता है और दोहराता है। यदि रेखाएं मेल नहीं खाती हैं तो यह पहली पंक्ति को प्रिंट करती है।

+0

बहुत बहुत धन्यवाद, potong। तुमने मुझे फिर से मदद की। मैं आपसे बहुत बहुत बाध्य हूं, धन्यवाद। अगर मैं कर सकता तो मैं आपको एक बक्षीस का भुगतान करूंगा! – captcha