将 ICS 转换为 table (awk)
Convert ICS into table (awk)
我正在尝试使用 awk 将 ics
文件解析为 table。
我的 ics 文件看起来像这样(这里只发布一个事件):
BEGIN:VEVENT
DTSTART:20171004T173000Z
DTEND:20171004T183000Z
DTSTAMP:20180209T144026Z
UID:999999c@google.com
CREATED:20171004T171653Z
DESCRIPTION:
LAST-MODIFIED:20171004T173916Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:This text is the summary
TRANSP:OPAQUE
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
BEGIN:VALARM
ACTION:NONE
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
X-WR-ALARMUID:282393849382
UID:883928394839283948392
ACKNOWLEDGED:20171004T173915Z
X-APPLE-DEFAULT-ALARM:TRUE
END:VALARM
END:VEVENT
我只对以 DTSTART
、DTEND
、CREATED
、SUMMARY
、
开头的行感兴趣
我想出了下面的代码
BEGIN{OFS="\t"}
=="DTSTART"{DTSTART=}
=="DTEND"{DTEND=}
=="CREATED"{CREATED=}
=="SUMMARY"{SUMMARY=}
{print DTSTART DTEND CREATED SUMMARY}
我正在执行
awk -F":" -f ics.awk file.ics
但是好像哪里出错了。
另外,最好打印一个 table header.
只需将最后一行替换为
/^END:VEVENT/ {print DTSTART, DTEND, CREATED, SUMMARY}
第一个是
BEGIN{
OFS="\t"
print "DTSTART", "DTEND", "CREATED", "SUMMARY"
}
结果:
DTSTART DTEND CREATED SUMMARY
20171004T173000Z 20171004T183000Z 20171004T171653Z This text is the summary
您正在为每一行执行“{print DTSTART DTEND CREATED SUMMARY}”。
简短awk
解决方案(针对静态输入文件格式):
awk -F':' '~/^(DTSTART|DTEND|CREATED|SUMMARY)/{
printf "%s%s",,(=="SUMMARY"? ORS:"\t")
}' file.ics
输出:
20171004T173000Z 20171004T183000Z 20171004T171653Z This text is the summary
我正在尝试使用 awk 将 ics
文件解析为 table。
我的 ics 文件看起来像这样(这里只发布一个事件):
BEGIN:VEVENT
DTSTART:20171004T173000Z
DTEND:20171004T183000Z
DTSTAMP:20180209T144026Z
UID:999999c@google.com
CREATED:20171004T171653Z
DESCRIPTION:
LAST-MODIFIED:20171004T173916Z
LOCATION:
SEQUENCE:0
STATUS:CONFIRMED
SUMMARY:This text is the summary
TRANSP:OPAQUE
X-APPLE-TRAVEL-ADVISORY-BEHAVIOR:AUTOMATIC
BEGIN:VALARM
ACTION:NONE
TRIGGER;VALUE=DATE-TIME:19760401T005545Z
X-WR-ALARMUID:282393849382
UID:883928394839283948392
ACKNOWLEDGED:20171004T173915Z
X-APPLE-DEFAULT-ALARM:TRUE
END:VALARM
END:VEVENT
我只对以 DTSTART
、DTEND
、CREATED
、SUMMARY
、
我想出了下面的代码
BEGIN{OFS="\t"}
=="DTSTART"{DTSTART=}
=="DTEND"{DTEND=}
=="CREATED"{CREATED=}
=="SUMMARY"{SUMMARY=}
{print DTSTART DTEND CREATED SUMMARY}
我正在执行
awk -F":" -f ics.awk file.ics
但是好像哪里出错了。 另外,最好打印一个 table header.
只需将最后一行替换为
/^END:VEVENT/ {print DTSTART, DTEND, CREATED, SUMMARY}
第一个是
BEGIN{
OFS="\t"
print "DTSTART", "DTEND", "CREATED", "SUMMARY"
}
结果:
DTSTART DTEND CREATED SUMMARY
20171004T173000Z 20171004T183000Z 20171004T171653Z This text is the summary
您正在为每一行执行“{print DTSTART DTEND CREATED SUMMARY}”。
简短awk
解决方案(针对静态输入文件格式):
awk -F':' '~/^(DTSTART|DTEND|CREATED|SUMMARY)/{
printf "%s%s",,(=="SUMMARY"? ORS:"\t")
}' file.ics
输出:
20171004T173000Z 20171004T183000Z 20171004T171653Z This text is the summary