Como posso atribuir coordenadas (x, y) a alguns valores?

2

Então eu basicamente tenho que atribuir coordenadas (x, y) a alguns ids que virão de um arquivo. Digamos que o arquivo items.txt tenha o seguinte conteúdo:

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

Esses IDs estão relacionados a alguns gráficos que serão ordenados em uma tabela. A tabela é como:

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

Quando adiciono os IDs à tabela, atribuo a eles seus cordenates alterando o valor de x e y . Assim, o primeiro item teria x = 0 & & y = 0 e o segundo x = 1 & & y = 0

Até agora eu tenho tentado fazer isso usando um for loop, mas estou enfrentando um problema que pode ter uma solução fácil usando outro idioma como perl ou python . Basicamente, não consegui atribuir o valor correto a y como se segue:

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

e assim por diante, enquanto x é como:

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

Portanto, não há problema em alterar isso com uma simples declaração if , mas não faço ideia de como fazer isso para gerenciar o valor y .

    
por sysfiend 30.05.2016 / 17:09

2 respostas

1

Provavelmente foi possível com as outras respostas fornecidas, mas, como eu estava procurando por algo bem simples, fiz isso, que está funcionando perfeitamente:

#!/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

Saída:

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

Pode não ser a melhor ou mais bela solução, mas espero que ajude alguém:)

    
por 31.05.2016 / 10:33
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";

saída:

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

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

Para referência: Matrizes multidimensionais em Perl

    
por 30.05.2016 / 18:10