Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: anger в Mar 05, 2005, 15:05



Титла: bash script
Публикувано от: anger в Mar 05, 2005, 15:05
Здравейте,
Опитвам се да напиша едно скриптче, което чете стойности от .txt файл с n реда и m полета на ред. Доколкото прочетох, bash поддържа само едномерни масиви, а на мен ми се искаше да вкарам в масив данните от файла и да мога да оперирам с тях. Ако можете, дайте ми някакъв прост пример с цикъл, четене от фаил и масив.
Благодаря предварително


Титла: bash script
Публикувано от: VladSun в Mar 05, 2005, 18:24
man cut
man awk

прим.

Цитат
awk '{print $1 $2}'


Титла: bash script
Публикувано от: rpetrov в Mar 05, 2005, 19:20
Или пък
Примерен код
#!/bin/sh

IFS=':'
declare -a arr

cat /etc/passwd | \
while read line; do
  arr=($line)
  echo ${arr[0]} ${arr[6]}
done

IFS=... задава разделителя

Аз лично, избягвам да ползвам масиви.


Титла: bash script
Публикувано от: foo в Mar 06, 2005, 18:41
:05-->
Цитат (anger @ Март 05 2005,16:05)
Здравейте,
Опитвам се да напиша едно скриптче, което чете стойности от .txt файл с n реда и m полета на ред. Доколкото прочетох, bash поддържа само едномерни масиви, а на мен ми се искаше да вкарам в масив данните от файла и да мога да оперирам с тях. Ако можете, дайте ми някакъв прост пример с цикъл, четене от фаил и масив.
Благодаря предварително

Примерен код

#!/bin/bash -f

_file="anger.txt"

# file:anger.txt:
#
# 11 12 13
# 21 22 23
# 31 32 33

_ncol=$1
_nrow=$2

_i=1

for _item in $(cat $_file); do

    a[$_i]=$_item

    (( _i++ ))
done

function index
{
    local _row=$1
    local _col=$2

    local _index=$(echo "($_row - 1) * $_ncol + $_col" | bc)

    echo $_index
}

for (( _i = 1; _i <= _nrow; _i++ )); do

    for (( _j = 1; _j <= _ncol; _j++ )); do

   _index=$(index $_i $_j)

   echo -n "${a[_index]} "
    done

    echo
done

# ouptut: ./anger.bash 3 3
#
# 11 12 13
# 21 22 23
# 31 32 33

exit 0


Титла: bash script
Публикувано от: anger в Mar 06, 2005, 20:01
Благодаря за отговорите! Много ми помогнахте :D  :D  :D