2013-07-01 16 views
6

this sorusu için bir saf çözümü bulmak için birkaç saat çalıştım. Açıkçası maalesef başarılı olamadım. Gerçekten zor bir soru. (Awk sorusundan) Saf sedefli sütunların karmaşık transpoze edilmesi


Örnekler:

  • girişi:
 
aaa 111  
aaa 222 
aaa 333 
bbb 444 
bbb 555 
ccc 666 
  • çıkışı:
 
aaa 111,222,333 
bbb 444,555 
ccc 666 

  • giriş
 
APM00065101435 189 
APM00065101435 190 
APM00065101435 191 
APM00065101435 390 
190104555 00C7 
190104555 00D1 
190104555 00E1 
190104555 0454 
190104555 0462 
APM00065101435 391 
APM00065101435 392 
  • çıkış
 
APM00065101435 189,190,191,390 
190104555 00C7,00D1,00E1,0454,0462 
APM00065101435 391,392 

Ne denediniz mi? Benim çalışmayan örneklerden bazıları: Bu okuma

 
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 

teşekkürler.

+0

Ugh ... bu * olabilir * mümkün olabilir ... ama kesinlikle olup olmadığımı bulmak için zamanımı harcamamayacağım! Neden saf sed solüsyonu istiyorsun? Bu sorun awk için bir çırpıdır ... neden hayatı kendiniz daha zorlaştırıyorsunuz? –

+0

Bu "awk" veya "perl" için bir çözüm daha okunaklı, bakımı mümkün olacak ve tek boynuzlu atların hayalini kurtaracak! Tek boynuzlu at adam için yap (ya da [potong] 'a kadar bekle (http://stackoverflow.com/users/967492/potong) –

cevap

5

Bu (GNU sed) sizin için işe yarayabilecek:

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

ya da isterseniz:

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

Bu model uzaya 2 satırları okur, her satırın başlangıcını karşılaştırır ve eğer aynı ise ikinci virgülün yerini, virgülle ilk eşleşecek ve tekrarlar. Çizgiler eşleşmezse, ilk satırı yazdırır.

+0

Çok teşekkür ederim, potong. Yine bana yardım ettin. Sana çok fazla mecburum, teşekkürler. Yapabilseydim sana bir ödül verirdim! – captcha