打印使用awk可以在电话号码中找到出生日期的所有行



在我的作业中,我必须创建一个awk脚本。脚本应该打印电话号码中可以找到出生日期的所有行。

下面是输入文件中的一些行:

firstname,lastname,city,born,phone,email
Salma,Helin,Hällaryd,2002-07-03,555674792,salma.helin@hallaryd.se
Sanna,Wahlgren,Torhamn,2004-08-02,555493393,sanna.wahlgren@torhamn.se
Anni,Örn,Resarö,1994-07-08,555408537,anni.orn@resaro.se
Thilda,Brandt,Holmsjö,1994-06-25,555197921,thilda.brandt@holmsjo.se
Teo,Stenström,Borgholm,1994-04-29,555229873,teo.stenstrom@borgholm.se
Alexis,Sjödin,Ardala,1991-03-04,555190611,alexis.sjodin@ardala.se
Stina,Örn,Gladö kvarn,2010-05-25,555622513,stina.orn@glado_kvarn.se

期望的输出是:

Anni Örn, 1994-07-08, 555408537
Teo Stenström, 1994-04-29, 555229873
Stina Örn, 2010-05-25, 555622513

这里是我得到的

BEGIN { FS="," }
NR == 1 { next }
{
split($4, d, "-") 
day = d[3]     
}

我试着分割日期,提取出生日期。现在我必须在5中找到匹配。例如,555408537中存在08。现在我被困住了。我不知道完成这个任务。我愿意接受任何建议。

提前感谢。

您可以尝试此awk,它将检查日期是否与电话号码匹配。

awk -F"[,-]" '$7 ~ $6 && /./' input file

$7 ~ $6将检查两列

中的匹配/./将删除空白行

Anni,Örn,Resarö,1994-07-08,555408537,anni.orn@resaro.se
Teo,Stenström,Borgholm,1994-04-29,555229873,teo.stenstrom@borgholm.se
Stina,Örn,Gladö kvarn,2010-05-25,555622513,stina.orn@glado_kvarn.se

您可能会使用index函数,如果找到,它会给出匹配的开始,否则为0,所以在您的情况下,检查>0是否足够。设置file.txt内容为

firstname,lastname,city,born,phone,email
Salma,Helin,Hällaryd,2002-07-03,555674792,salma.helin@hallaryd.se
Sanna,Wahlgren,Torhamn,2004-08-02,555493393,sanna.wahlgren@torhamn.se
Anni,Örn,Resarö,1994-07-08,555408537,anni.orn@resaro.se
Thilda,Brandt,Holmsjö,1994-06-25,555197921,thilda.brandt@holmsjo.se
Teo,Stenström,Borgholm,1994-04-29,555229873,teo.stenstrom@borgholm.se
Alexis,Sjödin,Ardala,1991-03-04,555190611,alexis.sjodin@ardala.se
Stina,Örn,Gladö kvarn,2010-05-25,555622513,stina.orn@glado_kvarn.se

然后

awk 'BEGIN{FS=","}NR==1{next}{split($4, d, "-");day = d[3];if(index($5,day)>0){print}}' file.txt

输出
Anni,Örn,Resarö,1994-07-08,555408537,anni.orn@resaro.se
Teo,Stenström,Borgholm,1994-04-29,555229873,teo.stenstrom@borgholm.se
Stina,Örn,Gladö kvarn,2010-05-25,555622513,stina.orn@glado_kvarn.se

注意,由于if的行为,您不必显式地与0进行比较,但可能会

BEGIN{FS=","}NR==1{next}{split($4, d, "-");day = d[3];if(index($5,day)){print}}

并得到相同的结果。我留下了重新制作print-ing,以显示所需的列作为练习。旁注:与其使用next跳过不需要的行,不如只对感兴趣的行注册操作,在本例中为

BEGIN{FS=","}NR>1{split($4, d, "-");day = d[3];if(index($5,day)){print}}

(在gawk 4.2.1中测试)

下面是另一个awk选项:

$ awk -F, 'NR > 1 && $5 ~ substr($4,9,10)' input
Anni,Örn,Resarö,1994-07-08,555408537,anni.orn@resaro.se
Teo,Stenström,Borgholm,1994-04-29,555229873,teo.stenstrom@borgholm.se
Stina,Örn,Gladö kvarn,2010-05-25,555622513,stina.orn@glado_kvarn.se

解释:将字段分隔符设置为逗号分隔值,打印除第一个(标题)之外的所有记录,其中字段号5与字段4中日期的最后部分匹配。

最新更新