我有一个包含许多行的文件:
at 12:00 the schedule is :
first_task:eating:fruit
second_task:rest:onehour
third_task:watching:horrorfilm
at 18:00 the schedule is :
first_task:eating:vegetals
second_task:rest:threehours
third_task:watching:manga
at 22:00 the schedule is :
first_task:eating:nothing
second_task:rest:sevenhours
third_task:watching:nothing
我试着在询问之前搜索。但我没有找到一种方法来按照我喜欢的方式过滤文件。
我想要一个过滤后的文件,如下所示:例如,如果我想知道我今天要吃什么。
at 12:00 eating:fruit
at 18:00 eating:vegetals
at 22:00 eating:nothing
有没有什么方法可以使用awk或bash来做到这一点?
使用awk
,可以执行以下操作:
awk -F '[ :]' '/the schedule is/{h=$2;m=$3} /eating/{print "at "h":"m" eating:"$3}' filename
输出:
at 12:00 eating:fruit
at 18:00 eating:vegetals
at 22:00 eating:nothing
这将给出正确的答案,即使您将eating
作为第二个或第三个任务。
perl -lne '$a=$1 if(/(^ats+[^s]*?)s/);print $a." ".$1 if(/(eating:.*)$/)'
请在此处查看输出。
使用grep和sed可以非常简单地实现这一点。假设您的示例文件保存为f.txt
:
egrep '^at|eating' f.txt | sed 's/first_task://' |
sed 's/the schedule is ://' | paste -d' ' - - | column -t
返回
at 12:00 eating:fruit
at 18:h00 eating:vegetals
at 22:h00 eating:nothing