2

Поэтому я в основном должен назначить (x, y) координаты некоторым идентификаторам, которые будут поступать из файла. Допустим, файл items.txt имеет следующее содержимое:

if-eth0-in
if-eth0-out
ping-status
cpu-load

Эти идентификаторы связаны с некоторыми графиками, которые будут упорядочены в таблице. Таблица выглядит так:

          column1     column2
row1       (0,0)   |   (1,0)
row2       (0,1)   |   (1,1)
row3       (0,2)   |   (1,2)

Когда я добавляю идентификаторы в таблицу, я назначаю им их cordenates, изменяя значение их x и y, чтобы первый элемент имел x = 0 && y = 0, а второй x = 1 && y = 0

До сих пор я пытался сделать это с помощью цикла for но я столкнулся с проблемой, которая может быть легко решена с использованием другого языка, такого как perl или python. По сути, я не смог назначить правильное значение y, так как это выглядит так:

item1: y=0
item2: y=0
item3: y=1
item4: y=1

и так далее, пока х выглядит так:

item1: x=0
item2: x=1
item3: x=0
item4: x=1

так что нет проблем с изменением этого с помощью простого оператора if но я понятия не имею, как мне это сделать, чтобы управлять значением y .

2 ответа2

1

Вероятно, это было выполнимо с другими предоставленными ответами, но, поскольку я искал что-то довольно простое, я сделал это, и это прекрасно работает:

#!/bin/bash

# First position will always be (1,0), let's set it.
x=1
y=0

# Variables that control wether we have to do a '+1' for $y
sum="no"
ftime="yes"

# For loop to check how the script would work.
# The final script reads from a file some ids instead but this helps testing
for i in {1..10};
do

# Do we have to do $y+1?
if [ $sum = "yes" ]; then
  let y=$y+1
fi

# Echo output
  echo "---------"
  echo "($x,$y)"

# Let's do the set up for the next run of the loop.
# x changes every time it runs so, easy 'if' condition.
if [ $x -eq 1 ]; then
  x=0
elif [ $x -eq 0 ]; then
  x=1
fi

# Check if it's the first time the loop is running.
# If not, then we have to change the value of sum.
# Otherwise, we don't change it so it goes as we want.
if [ $ftime = "no" ]; then
  if [ $sum = "yes" ]; then
    sum="no"
  elif [ $sum = "no" ]; then
    sum="yes"
  fi
elif [ $ftime = "yes" ]; then
  ftime="no"
fi

done

Выход:

---------
(1,0)
---------
(0,0)
---------
(1,1)
---------
(0,1)
---------
(1,2)
---------
(0,2)
---------
(1,3)
---------
(0,3)
---------
(1,4)
---------
(0,4)

Не может быть лучшим или самым красивым решением, но надеюсь, что оно кому-нибудь поможет

1

Perl:

#!/usr/bin/perl

my @coords = (
        [1, 1.1],       # coordinate 1, format x, y, first element has index 0
        [2, 2.2]        # coordinate 2
);
print "point 1: coord x=". $coords[0][0]."\n";
print "point 1: coord y=". $coords[0][1]."\n\n";

# change y for coord 2
$coords[1][1] = 10;

print "point 2: coord x=". $coords[1][0]."\n";
print "point 2: coord y=". $coords[1][1]."\n";

выход:

# ./test.pl
point 1: coord x=1
point 1: coord y=1.1

point 2: coord x=2
point 2: coord y=10

Для справки: многомерные массивы в Perl

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .