LINUX.ORG.RU
решено ФорумAdmin

цикл в баш.

 ,


0

1

собственно такой вот быдлокод:

#!/bin/bash
zlo=/home/user/FILE.dat
while read line;
        do
        kod=`cut -c 4-16 "$line"`
        gorod=`cut -c 190-224 "$line"`
        echo "$kod"XXXX"$gorod"
        done < $zlo
Где ошибка. У меня вообще ничего не парсится.
Спасибо.

★★★★★
#!/bin/bash
zlo=/home/user/FILE.dat
while read line
        do
        kod=$(echo ${line} | cut -c 4-16 )
        gorod=$(echo ${line} | cut -c 190-224 )
        echo "$kod"XXXX"$gorod"
        done < $zlo

Он же тебе говорит что не так (cut OPTION... [FILE]...).

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от dada

У меня ругалось на cut

cut: 1111111111111111: Нет такого файла или каталога
cut: 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222: Нет такого файла или каталога
cut: 1111111111111111: Нет такого файла или каталога
cut: 222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222: Нет такого файла или каталога
XXXX

(файл записал единицами и двойками по твоей маске)

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

ещё вопрос.
у меня некорректно отображается выхлоп.
то есть если в консоль вбить cut -c 190-224 file всё ок.
а вот в скрипте выводится другое.
а т.к файл не очень хороший, понять что именно он отображает пока не получается. это проблема cut-a ?

dada ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

нет, не кирилица.
пример выложить не получится к сожалению.
Файл содержит переводы.

dada ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

какая разница между выполнением команды grep -Eo '.{35}$' в скрипте и из консоли ?
из консоли всё ок. в скрипте какая-та фигня выводится.

dada ★★★★★
() автор топика
Ответ на: комментарий от dada

Просто cut умеет нормально работать только с ASCII, если у тебя там символы весят больше байта то и будет мусор.

alozovskoy ★★★★★
()
Ответ на: комментарий от dada

Ну ты бы показал что выводится, а то у меня Debian, libastral устаревший. Вообще всякие служебные символы типа $ точно нормально экранированы?

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

пример строки:

AAAAAAAAA BBBBBBBBBB CCCCCCCCCC BEOGRAD           
SSSSSSSSS DDDDDDDDDD FFFFFFFFFF BAKU              
Обрати внимание на пробелы в конце строк.
Нужно вывести город(через awk не подходит).
Вот такой grep -Eo '.{18}$' всё делает на ура.
но если впихнуть этот же греп в скрипт, он перестаёт считать пробелы.
в этом и есть проблема.
завис.

dada ★★★★★
() автор топика
Ответ на: комментарий от dada

Читай строку в массив bash и бери элементы из массива (разделитель - пробел)

#!/bin/bash
zlo=/home/user/FILE.dat
while IFS=$' ' read -r -a myArray
do
 echo ${myArray[0]}XXXX${myArray[1]}
done < ${zlo}
alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 2)
Ответ на: комментарий от dada

Ну если есть возможность поправить исходник то заменить пробелы-разделители на табы, либо прикинуть позицию города в массиве - последний - выводить, например, с 6 элемента до конца, после города есть еще postcode и код страны - посчитать сколько элементов в массиве, считать с 6 до количествоЭлементов - 2 и так далее.

alozovskoy ★★★★★
()
Ответ на: комментарий от sdio

вот как получилось.

#!/bin/bash
zlo=/root/elmar/FI.dat
while read line;
        do
        gorod=$(echo "${line}" | cut -c 190-224 )
        kod=$(echo "${line}" | cut -c 4-16 )
        echo "$gorod"xxxxxx"$kod"
        done < $zlo
Спасибо.
И тебе спасибо alozovskoy
Проблема как сказал сдио, в кавычках.

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