2016-04-12 6 views
0

Я знаю, что вы можете использовать разделители полей для разбиения поля в AWK, однако у меня есть вопрос о строке без каких-либо разделителей. Мне нужно обработать, чтобы следующие данные, и я не знаю, как начать:Разбить строку с помощью AWK или PERL

[email protected] 
[email protected]rWayAlamosa81101 
[email protected]polis55403 
DanielJEverh[email protected]87122 
[email protected]acey98513 
[email protected] 
[email protected]5212 
[email protected]oines50021 
[email protected]veWaySandiego91210 

Я хочу форматировать исходные данные в этом:

Ryan Wehe, 989-98-7412 
2001 Blake St 
Denver, CO 80205 
[email protected]  
(202) 555-0126 

Joseph Lee, 605-49-7184 
5986 Budweiser Way 
Alamosa, CO 81101 
[email protected] 
(303) 555-0103 

AmyJohnson, 783-33-3251 
14 N 5th St 
Minneapolis, MN 55403 
[email protected] 
(651) 555-0164 
+0

У вас * есть * использовать Awk или любой язык приемлемый? –

+0

Я могу использовать комбо AWK и PERL –

+0

Это работало для вас? Вы никогда не принимали ответа. –

ответ

2

Насколько мне известно, Awk не обеспечивает возможности использования групп захвата для определения разделителя полей.

С учетом этого я думаю, что быстрый хак может быть лучшим вариантом:

cat addresses.txt | perl -ne '/([A-Z][[:lower:]]*)([A-Z]*[[:lower:]]*)([0-9]{9})(.*?\.\w{2,3})([0-9]{10})(.*?)([0-9]{5})/ && print "$1 $2 $3 $4 $5 $6\n"' 

Который возвращает это:

Ryan Wehe 989987412 [email protected] 2025550126 CO2001BlakeStDenver 80205 
Joseph Lee 605497184 [email protected] 3035550103 CO5986BudweiserWayAlamosa 81101 
Amy Johnson 783333251 [email protected] 6515550164 MN14N5thStMinneapolis 55403 
Daniel JEverhard 314849866 [email protected] 5059358554 NM8830JohnsonRdAlbuquerque 87122 
Philip EPeterson 325764011 [email protected] 4561238888 WA 54246 
Matt VNulk 124085733 [email protected] 2093865442 KSManhattanStRiley 87512 
Brandon TLyons 123456123 [email protected] 5755595459 AZ635WElmStMesa 85212 
Roger ATurtle 983421567 [email protected] 8587754321 IA3400SWIslanDrdDesmoines 50021 
Marc JWhiz 745629754 [email protected] 6195323200 CA215NCollegeGroveWaySandiego 91210 

Ваш ответ использует оба формата, так что я не был уверен, если вам нужно чтобы разбить имена друг на друга (например, Райан Веэ вместо RyanWehe), приспосабливая его к этому довольно прямолинейно.

+0

Спасибо, это лучшее, что я видел, и я буду использовать это. Большое спасибо! –

Смежные вопросы