bash и построчное считывание

8 сообщений / 0 new
Последнее сообщение
Exo
Аватар пользователя Exo
Не в сети
Зарегистрирован: 20/09/2010
bash и построчное считывание

Люди добрые, помогите, уперся в стенку и дальше не получается идтить.
Задача: есть TSV-файл (tab separated values) с 4 столбцами (хоть это и не важно), для дальнейшей обработки мне его нужно в цикле построчно считывать в переменную.
Думал, что все обойдется простым "[b]for i in $(cat myfile)[/b]", а хрен там, эта сволочь читает за раз только одно значение столбца, а не строки. Пробовал через "[b]while read[/b]", но и тут засада, нельзя мне конвертировать табы в пробелы.

Т.е. собственно вопрос: как это все реализовать?

Заранее всем спасибо

P.S: Advansed bash scripting уже смотрел, но не нашел там ничего путного, гугль тож ничего хорошего не предложил.

wlads
Не в сети
Зарегистрирован: 20/09/2010

А bash - критично? Просто в перле это удобнее делать. Он вроде как для этого и заточен.

Exo
Аватар пользователя Exo
Не в сети
Зарегистрирован: 20/09/2010

некритично... можно попробовать написать это все и на перле
Просто уже практически весь скрипт (хоть и очень небольшой) закончен, это оставалась единственная загвоздка.

Vitls
Аватар пользователя Vitls
Не в сети
Зарегистрирован: 21/09/2010

Учим awk:

[vitls@zeelog:vitls]$ cat a
aaa     bbb     ccc     ddd
111     222     333     444

[vitls@zeelog:vitls]$ cat a | awk '{print $0}'
aaa     bbb     ccc     ddd
111     222     333     444

[vitls@zeelog:vitls]$ cat a | awk '{print $1}'
aaa
111

[vitls@zeelog:vitls]$ cat a | awk '{print $1"\t"$3}'
aaa     ccc
111     333

Думаю, что догадаться не трудно.
awk - вполне функциональный язык программирования для работы со строками.

[ Редактирование 25.04.2007 - 20:36:37 ]

Дело не в том как болезнь вылечить.
Дело в том как других заразить.

Exo
Аватар пользователя Exo
Не в сети
Зарегистрирован: 20/09/2010

тем не менее "for i in $(cat a | awk '{print $0}' )" дает тот же эффект, что и "for i in $(cat a)". Мне нужно делать построчный анализ файла и в зависимости от значений некоторых полей формировать разные mysql запросы на основе всей строки.

Vitls
Аватар пользователя Vitls
Не в сети
Зарегистрирован: 21/09/2010

Зачем for? Читайте man bash, чтобы понять как это работает.

cat для awk передает строку. awk получает строку и разбивает ее на поля разделителем \t. Вам остается в программе на awk написать способы обрпаботки полей.

или пишите тоже самое на перл/пхп.

Дело не в том как болезнь вылечить.
Дело в том как других заразить.

WhiteDragon (не проверено)

[root@wd ~]# while read l; do echo "$l"; done
asd<tab>asd
asd<tab>asd
но
[root@wd ~]# while read l; do echo $l; done
asd<tab>asd
asd asd

тоесть табы коцает не реад а эхо

и еще хинт на тему разламывания по колонкам:
[root@wd ~]# while read k l; do echo "$l/$k"; done
qwe<tab>asd
asd/qwe

<span class='smallblacktext'>[ Редактирование 26.04.2007 - 21:25:24 ]</span>

Exo
Аватар пользователя Exo
Не в сети
Зарегистрирован: 20/09/2010

WhiteDragon, ты гений! :)
Спасибо огромное! То что нужно!

RSS-материал