使用 awk 打印可以在 phone 数字中找到出生日期的所有行
Print all rows where the day of birth can be found in the phone number using awk
在我的作业中,我必须创建一个 awk 脚本。该脚本应打印出生日期可以在 phone 数字中找到的所有行。
这是输入文件中的 som 行:
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(, d, "-")
day = d[3]
}
我尝试拆分日期并提取出生日期。现在我必须了解如何在字段 5
中找到匹配项。例如 08
存在于 555408537
中。现在我卡住了。我不知道完成这个任务。我愿意接受任何建议。
提前致谢。
您可以使用 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(, d, "-");day = d[3];if(index(,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(, d, "-");day = d[3];if(index(,day)){print}}
并得到相同的结果。我留下了修改 print
-ing 以将所需的列显示为练习。作为旁注:而不是使用 next
跳过不需要的行,您可以只为感兴趣的行注册操作,在这种情况下
BEGIN{FS=","}NR>1{split(, d, "-");day = d[3];if(index(,day)){print}}
(在 gawk 4.2.1 中测试)
您可以试试这个 awk
,它会检查日期是否与 phone 数字匹配。
awk -F"[,-]" ' ~ && /./' input file
~
将检查两列中的匹配项
/./
将删除空行
输出
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
这是另一个 awk 替代方案:
$ awk -F, 'NR > 1 && ~ substr(,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
解释: 将字段分隔符设置为 comma-separated 值,打印除字段号 5 匹配的第一个(header)之外的所有记录字段 4 中日期的最后一部分。
在我的作业中,我必须创建一个 awk 脚本。该脚本应打印出生日期可以在 phone 数字中找到的所有行。
这是输入文件中的 som 行:
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(, d, "-")
day = d[3]
}
我尝试拆分日期并提取出生日期。现在我必须了解如何在字段 5
中找到匹配项。例如 08
存在于 555408537
中。现在我卡住了。我不知道完成这个任务。我愿意接受任何建议。
提前致谢。
您可以使用 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(, d, "-");day = d[3];if(index(,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(, d, "-");day = d[3];if(index(,day)){print}}
并得到相同的结果。我留下了修改 print
-ing 以将所需的列显示为练习。作为旁注:而不是使用 next
跳过不需要的行,您可以只为感兴趣的行注册操作,在这种情况下
BEGIN{FS=","}NR>1{split(, d, "-");day = d[3];if(index(,day)){print}}
(在 gawk 4.2.1 中测试)
您可以试试这个 awk
,它会检查日期是否与 phone 数字匹配。
awk -F"[,-]" ' ~ && /./' input file
~
将检查两列中的匹配项
/./
将删除空行
输出
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
这是另一个 awk 替代方案:
$ awk -F, 'NR > 1 && ~ substr(,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
解释: 将字段分隔符设置为 comma-separated 值,打印除字段号 5 匹配的第一个(header)之外的所有记录字段 4 中日期的最后一部分。