Reputation: 43
I have a file that contains many lines :
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
I tried to search before Asking . but I didn't find a way to filter the file the way I liked .
I would like to get a filtered file like this : for example If I would like to know what I am going to eat today .
at 12:00 eating:fruit
at 18:00 eating:vegetals
at 22:00 eating:nothing
Is there any way to do this using awk or bash ?
Upvotes: 1
Views: 68
Reputation: 3223
Using awk
, you can do it as:
awk -F '[\ :]' '/the schedule is/{h=$2;m=$3} /eating/{print "at "h":"m" eating:"$3}' filename
Output:
at 12:00 eating:fruit
at 18:00 eating:vegetals
at 22:00 eating:nothing
This will give correct answer, even if you have eating
as second or third task.
Upvotes: 4
Reputation: 67291
perl -lne '$a=$1 if(/(^at\s+[^\s]*?)\s/);print $a." ".$1 if(/(eating:.*)$/)'
Check here for output.
Upvotes: 3
Reputation: 5404
You can do this pretty simply with grep and sed. Assuming your example file is saved as f.txt
:
egrep '^at|eating' f.txt | sed 's/first_task://' |
sed 's/the schedule is ://' | paste -d' ' - - | column -t
returns
at 12:00 eating:fruit
at 18:h00 eating:vegetals
at 22:h00 eating:nothing
Upvotes: 2