正在筛选文件



我有一个包含许多行的文件:

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

相关内容

  • 没有找到相关文章

最新更新