在我的作业中,我必须创建一个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中日期的最后部分匹配。