LINUX.ORG.RU

Разбор файла на переменные

 ,


0

3

Есть файл со списком [field1] [field2], поля разделены пробелом. Нужно разобрать файл в цикле построчно чтобы переменной $a присвоить значение «field1», а переменной $b «field2». Решил так:

IFS=$'\n'
for data in `cat file.txt`
do
echo $data > data.tmp
a=`awk '{printf $1}' data.tmp`
b=`awk '{printf $2}' data.tmp`
echo "это пользователь $a"
echo "это пароль $b"

done
Какие еще варианты есть? Может как-то массив можно использовать?

$ cat > data.tmp
user1 pwd1
user2 pwd2
user3 pwd3
$ while read a b; do   echo "это пользователь $a";   echo "это пароль $b"; done < data.tmp
это пользователь user1
это пароль pwd1
это пользователь user2
это пароль pwd2
это пользователь user3
это пароль pwd3
anonymous ()

Это вы называете «вариантом»? По-моему, это кристаллический песец.

Элементарный разбор файла на ГНУ Баше всегда выглядит так:

while read a b; do
    echo "пользователь $a"
    echo "пользователь $b"
done < 'file.txt'
Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
while read A B ; do
   echo "A=${A} B=${B}"
done < file.txt
ABW ★★★★★ ()
Ответ на: комментарий от taomao

Не цикл так может, а read так может. Ты же не думаешь, что while read это специфическая конструкция?

anonymous ()
Ответ на: комментарий от anonymous

Думал что конструкция «while read a b; do; done» цельная, если бы read мог, то как нибудь так: while read a b < file, for же как раз так и делает.

taomao ()

Еще так можно:

exec < file.txt
while read a b
do

taomao ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.