Автор Тема: bash script  (Прочетена 2102 пъти)

anger

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

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
bash script
« Отговор #1 -: Mar 05, 2005, 18:24 »
man cut
man awk

прим.

Цитат
awk '{print $1 $2}'
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

rpetrov

  • Напреднали
  • *****
  • Публикации: 571
    • Профил
    • WWW
bash script
« Отговор #2 -: 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=... задава разделителя

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

foo

  • Новаци
  • *
  • Публикации: 1
    • Профил
bash script
« Отговор #3 -: Mar 06, 2005, 18:41 »
':0'5-->
Цитат (anger @ Март 05 2005,16':0'5)
Здравейте,
Опитвам се да напиша едно скриптче, което чете стойности от .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
Активен

anger

  • Напреднали
  • *****
  • Публикации: 19
    • Профил
bash script
« Отговор #4 -: Mar 06, 2005, 20:01 »
Благодаря за отговорите! Много ми помогнахте '<img'>  '<img'>  '<img'>
Активен

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
bash script
Хардуерни и софтуерни проблеми
flame 6 2535 Последна публикация Sep 02, 2004, 12:28
от mimosh
Помощ за bash script
Хардуерни и софтуерни проблеми
Ivan_storm 4 2056 Последна публикация May 30, 2005, 12:31
от rpetrov
bash script за праверяване на процес
Общ форум
sys7em 8 2572 Последна публикация Aug 09, 2005, 15:39
от
Bash script и извеждането му
Web development
martien 3 1897 Последна публикация Nov 02, 2006, 11:55
от morbid_viper
Bash script за следене съдържанието на директория
Общ форум
mishot 9 2685 Последна публикация Mar 05, 2008, 00:38
от maniac