обработка текста в Bash

oyuriyu

есть такой скрипт tweather.sh :

#!/bin/bash
city="Toronto"
link=CAXX0504_c.html?force_units=1
file=/tmp/weather.txt

location=http://weather.yahoo.com/forecast/$link
lynx -accept_all_cookies -dump $location > $file
begin=`cat -n $file | grep "Currently" | cut -d ' ' -f5`
end=`expr $begin + 40`

head -n $end $file > tmp.t
tail -n 41 tmp.t > $file

case $1 in
Today) head -n 6 $file | sed '3d' ;;
Tomorrow)
begin=`cat -n $file | grep 'Today Tomorrow' | cut -d ' ' -f5`
end=`cat -n $file | grep 'Extended' | cut -d ' ' -f5`
num=`expr $end - $begin - 1`
end2=`expr $begin + 7`

head -n $end2 $file > tmp.t
tail -n 3 tmp.t | sed 's/sky/\n sky/' | sed '4d' ;;
*) exit ;;
esac


rm tmp.t
rm $file
Вывод его выглядит так :
 negrace:bin$ ./tweather.sh Today
Currently:
14
Fair
High: 17
Low: 11
negrace:bin$ ./tweather.sh Tomorrow
Mostly Sunny
High: 19
Low: 13
negrace:bin$

А хочется в today, например, склеить через пробел 1+2+3 и 4+5 строки, чтобы выглядел примерно вот так :
 negrace:bin$ ./tweather.sh Today
Currently: 14 Fair
High: 17 Low: 11
negrace:bin$ ./tweather.sh Tomorrow
Mostly Sunny
High: 19 Low: 13
negrace:bin$
Как это можно башевыми средствами сделать ?

pitrik2

самый тупой способ:
есть такая команда склейки строк
tr "\n" " "
например:
echo -e "ee\nee" | tr "\n" " "
собсна сам тупой способ:
head -n 6 $file | sed '3d' ;;
заменить на чтото такое:
head -n 4 $file | sed '3d' | tr "\n" " "
head -n 6 $file | sed '1,2,3,4d' ;;

pitrik2

ну тойсть я нагнал
правильно так:
head -n 2 $file | tr "\n" " "
head -n 4 $file | sed '1,3d'
head -n 6 $file | sed '1,4d' | tr "\n" " "
но все таки это способ для извращенцев
лучше наверна использовать split
или perl/python

pitrik2

а можно вообще head не юзать
sed --quiet '1,2p' $file | tr "\n" " "
sed --quiet '4p' $file
sed --quiet '5,6p' $file | tr "\n" " "

oyuriyu

о, спасибо ! Всё работает, часть про tomorrow сам сделал.

oyuriyu

эх, говорила мне мама "ешь манную кашу и учи sed", а я не слушал.
Оставить комментарий
Имя или ник:
Комментарий: