LINUX.ORG.RU

Вопрос по циклам 2

 , , ,


0

2

1. Есть директория с текстовым файлом, где каждая строчка с новой строки

2. Есть директория с файлами.

3. Нужно строки применить к файлам, по типу «chgrp строка1 файл1, chgrp строка2 файл2»

Пробывал следующий цикл, но работает максимально криво, результат - строки не соответствуют нужным файлам. Есть другие идеи ? Либо есть какие-то ошибки ?

#!/bin/sh

cd /home/man/httpd-logs # перехожу в директорию с файлами
datax="/home/man/data.txt" #строки

target=$(ls -ll | awk '{print $9}' | grep 'access.log') #команда выводит нужные мне файлы в директори, не обращайте на неё внимания. считайте, что это просто вывод файлов в директории.

for i in $target
do 
read line
chgrp $line $i
done < $datax


Ответ на: комментарий от legolegs

я скину сейчас реальные строки и файлы, и покажу как всё распределенно

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

да, группы распределенны вообще в непонятном порядке, и при каждом запуске порядок не меняется.

В вашем цикле нет ничего непонятно-загадочного. Первая группа должна быть первой строкой из файла, первый файл - тот что даёт ls первым и со строкой access.log в имени. Для первого — работает?

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

Это 5 последних файлов в директории. Я специально сейчас в ручную применил chgrp к ним, чтобы показать как должны быть распределенны именна груп. Именна груп в таком же порядке написаны и в data.txt.

ah000448   zmi.dp.com.access.log
ah001107   znvk-kontakt.zp.ru.access.log
ah000749   zouk-dance.com.access.log
ah000544   zpc.dkepop.com.access.log
ah000890   zvvz.com.access.log

Теперь. После прогона скрипта - именна груп берутся непонятно из какого порядка из data.txt, и почему идёт такая перемешка, мне это не ясно.

vn         zmi.dp.ua.access.log
volans     znvk-kontakt.zp.ua.access.log
ah001036   zouk-dance.dp.ua.access.log
vprisn     zpc.dkepop.dp.ua.access.log
vpu-2      zvvz.com.ua.access.log
gamble ()
Ответ на: комментарий от gamble

Для первых штук 3-4 - да, но потом всё ломается.

Ну так пятая строка из файла - действительно пятая? А пятый файл из каталога - действиетльно пятый в выводе ls? Ну так и чего же вы хотите? Если нет соответствия, значит надо его привнести.

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

Вывод файлов в верном порядке после прогона скрипта, но имена груп нет, они раскиданы, либо повторяются по 10-15 раз к любым файлам.

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

Вывод файлов в верном порядке после прогона скрипта, но имена груп нет, они раскиданы, либо повторяются по 10-15 раз к любым файлам.

Зачем вы занимаетесь магией — пытаетесь найти закономерности в повторениях? Вы найдите первое несоответствие в отладочном выводе, потом сравните номер строки и номер файла в выводе ls. Не может в этой простой программе что-то магически запутаться!

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

первые именна групп по head data.txt, их правильный порядок

ort
380612139968
ah000827
miscalin
ah000243
ah000990
ah001099
ah000976
ah000976
ah000976

и первые файлы из директории

1st-dirigible.dp.ua.access.log
2015.toloka.net.access.log
2016.toloka.net.access.log
a-stella.com.access.log
a3d.com.ua.access.log
abcs.com.ua.access.log
academy.ks.ua.access.log
ace.dp.ua.access.log
adc.dp.ua.access.log
adc1.dp.ua.access.log

gamble ()

Есть директория с текстовым файлом, где каждая строчка с новой строки

Логично.

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

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

Буду разбираться дальше.

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

Именно поэтому тут полдюжины человек советовали сделать файл вида «группа домен»

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

Тоесть вы хотите сказать, что у вас есть какой-то файл, забитый рандомно именами груп и вам нужен скрипт, который угадает сам, кому какую группу присвоить?!

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

Нет. Он итерационно присвал именна груп всем файлам подряд (даже тем, которые групу иметь не должны), отсюда и ошибка.

Сейчас мне нужно убрать эти файлы без именни группы, и поставить скрипт на выполнение снова.

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

я сортирую файлы через ls -ll | awk '{print $9}' | grep 'access.log

Есть в русском языке такие слова:

* Фильтрация

* Сортировка

Так вот, у вас - фильтрация, а не сортировка. Для сортировки, неожиданно, есть sort.

Но в принципе я понимаю суть подхода: вы видите файлы по ls, создаёте для них файл соответствия группам, хотите пройти по тем же файлам и сделать им chgrp. Если между первым ls и вторым ничего не прооизошло - соответствие будет однозначным.

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