Автор Гілка: Пробіл клятий  (Прочитано 2351 раз)

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Пробіл клятий
« : 2008-12-17 17:48:45 »
Якось з'ясувалось, що в мене десь була помилка в роздільній здатності сканера. Ну і вирішив юніксвейнути: написати скрипта щоб перецифрував всі файли, коли з'ясую де конкретно собака зарита (вона була зарита під 250dpi).
#pydig
#usage: pydig <file.xpm> <symbol> <outfile> dots [convert params]
#convert params:
#        -sp x_pts_per_par y_pts_per_par x_in_fig y_in_fig x_real y_real

X_SCL=-65.616797900262469
Y_SCL=10
DOTS=3
sps()
{
if [ $1 == "_" ]
then
echo '" "'
else
echo $1
fi
}
dgt()
{
echo pydig ${1}.xpm $2 ${1}.dat ${DOTS} -sp ${X_SCL} ${Y_SCL} $3 $4 $5 $6
pydig ${1}.xpm  $2 ${1}.dat ${DOTS} -sp ${X_SCL} ${Y_SCL} $3 $4 $5 $6
}
for i in \
 'N22  _    3841 1220 31 0'\
 'N21  +   3646 828  31 0'\
 'N246 _    3885 2526 30 0'\
 'N247 +   3706 2596 30 0'\
 'N24  _    3737 1082 30 0'\
 'N23  .   3731 886  30 0'
do
echo $i
dgt $i
done

echo all done \!\!\!

gnuplot -persist << eol
$(echo 'plot "N21.dat" w l , "N22.dat" w l , "N23.dat" u 1:($2+30) w l, "N24.dat" u 1:($2+40) w l, "N246.dat" u 1:($2+70) w l, "N247.dat" u 1:($2+70) w l')
q
eol

ls -l *.dat
Проблема наступна: як передати підігу пробіл в якості другого параметру - як не збочувався в строку запихати "' '" - воно (шел) чомусь це перетворює в два апострофи, які йдуть,  як 2 окремі параметри  >:( змушений був перекрутити xpm-ки під свого скрипта (з допомогою tr замінив " " на "_").
Ну і з гнуплотом - теж окреме збочення  ;)
« Змінено: 2008-12-17 17:50:56 від serg_ik »
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Відсутній cadca

  • Письменник
  • *****
  • дописів: 955
  • Карма: +0/-0
  • free like beer
Re: Пробіл клятий
« Відповідей #1 : 2008-12-17 18:55:32 »
А "екранувати" пробіл зворотнім слешем "\ " ? ::)
Ubuntu 20.04/18.04; CentOS 7.x

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Пробіл клятий
« Відповідей #2 : 2008-12-17 19:43:33 »
Пробував - воно слеша підсовувало в якості параметру. Треба щось фундаментальніше - якеось оперувати 2-вимірними масивами в баші. Піду щось спробую покурити...  ;)
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Михайло Даниленко

  • Гість
Re: Пробіл клятий
« Відповідей #3 : 2008-12-17 20:07:25 »
s/$2/"$2"/

Михайло Даниленко

  • Гість
Re: Пробіл клятий
« Відповідей #4 : 2008-12-17 20:30:13 »
угу, не все так просто... не тестував, але мабуть має працювати.
І ще, пліз, форматуйте код, хоч трошки.

#pydig
#usage: pydig <file.xpm> <symbol> <outfile> dots [convert params]
#convert params:
#        -sp x_pts_per_par y_pts_per_par x_in_fig y_in_fig x_real y_real

X_SCL=-65.616797900262469
Y_SCL=10
DOTS=3
sps()
{
        if [ $1 == "_" ]; then
                echo '" "'
        else
                echo $1
        fi
}

dgt()
{
        echo pydig ${1}.xpm $2 ${1}.dat ${DOTS} -sp ${X_SCL} ${Y_SCL} $3 $4 $5 $6
       pydig "${1}.xpm" "$2" "${1}.dat" "${DOTS}" -sp "${X_SCL}" "${Y_SCL}" "$3" "$4" "$5" "$6"
}
for i in \
'N22  _ " "  3841 1220 31 0'\
 'N21  + " " 3646 828  31 0'\
 'N246 _ " "  3885 2526 30 0'\
 'N247 + " " 3706 2596 30 0'\
 'N24  _ " "  3737 1082 30 0'\
 'N23  . " " 3731 886  30 0'

do
       echo $i
      eval "dgt $i"
done

echo all done \!\!\!

gnuplot -persist << eol
$(echo 'plot "N21.dat" w l , "N22.dat" w l , "N23.dat" u 1:($2+30) w l, "N24.dat" u 1:($2+40) w l, "N246.dat" u 1:($2+70) w l, "N247.dat" u 1:($2+70) w l')
q
eol

ls -l *.dat

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Пробіл клятий
« Відповідей #5 : 2008-12-17 20:40:33 »
Тестим аналог
function params
{
for i in $@
do
echo "$i"
done
}
STR='"par 1" "par 2" " "'
params $STR
$ sh script.sh
"par
1"
"par
2"
"
"
Кажу ж дробить параметри...  :-X
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Михайло Даниленко

  • Гість
Re: Пробіл клятий
« Відповідей #6 : 2008-12-17 20:44:36 »
1. eval
2. лапки навколо $@

Відсутній Сергій Лисовенко

  • Літератор
  • ******
  • дописів: 1489
  • Карма: +0/-0
Re: Пробіл клятий
« Відповідей #7 : 2008-12-18 10:15:44 »
Насправді
1. eval
2. лапки навколо params $STR

eval "params $STR"
Якщо Лінукс написали студенти - нехай вони під ним і навчаються.

Михайло Даниленко

  • Гість
Re: Пробіл клятий
« Відповідей #8 : 2008-12-18 11:22:14 »
Навколо $@ також. А то розіб'є на параметри у for.