使用AWK或PERL分解字符串

时间:2016-04-12 22:48:12

标签: bash unix awk

我知道你可以使用字段分隔符来分解AWK中的字段,但是我对没有任何分隔符的字符串有疑问。我需要处理以下数据,我不知道如何开始:

RyanWehe989987412rwehe@asu.edu2025550126CO2001BlakeStDenver80205
JosephLee605497184josephl@mailinator.com3035550103CO5986BudweiserWayAlamosa81101
AmyJohnson783333251amyj@mailinator.com6515550164MN14N5thStMinneapolis55403
DanielJEverhard314849866everhard@asu.edu5059358554NM8830JohnsonRdAlbuquerque87122
PhilipEPeterson325764011peterson@asu.edu4561238888WA542468thAveLacey98513
MattVNulk124085733nulk@asu.edu2093865442KSManhattanStRiley87512
BrandonTLyons123456123btlyons1@asu.edu5755595459AZ635WElmStMesa85212
RogerATurtle983421567rat@gmail.com8587754321IA3400SWIslanDrdDesmoines50021
MarcJWhiz745629754marcwhiz76@yahoo.com6195323200CA215NCollegeGroveWaySandiego91210

我想将原始数据格式化为:

Ryan Wehe, 989-98-7412
2001 Blake St 
Denver, CO 80205
wehe@asu.edu    
(202) 555-0126  

Joseph Lee, 605-49-7184
5986 Budweiser Way 
Alamosa, CO 81101
josephl@mailinator.com
(303) 555-0103

AmyJohnson, 783-33-3251
14 N 5th St 
Minneapolis, MN 55403
amyj@mailinator.com
(651) 555-0164

1 个答案:

答案 0 :(得分:2)

据我所知,Awk没有为使用捕获组定义字段分隔符提供便利。

考虑到这一点,我认为快速破解可能是你最好的选择:

<rdlt version="1.5" xmlns:rdlt="http://www.rdlt.org" xmlns="http://www.rdlt.org">
    <created>2016-02-18T15:36:29.326+00:00</created>
    <updated>2016-02-18T15:36:29.326+00:00</updated>
</rdlt>

返回此内容:

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而不是RyanWehe),将其调整为相当严格。