LINUX.ORG.RU

Нужна помощь в написании bash скрипта

 


1

2

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

Имеются файлы, сгруппированные в 4 каталога по тематике. Каталог 1 file1 file2

Каталог 2 file 3 file 4 file 5

и т.д.

Во-первых, необходимо, убрать дубликаты значений в каждом файле. Поиск выдал такое -

$ sort file 1 | uniq > file 1

Далее, после удаления дубликатов, необходимо поочередно сравнить файлы из разных каталогов на совпадения значений. Опять же, из поиска по форуму вытащил такое:

$ comm -12 file 1 file 3 > file 1-3

Количество файлов в каталогах не фиксированное. Теперь не могу понять, как это зациклить грамотно. Мысли такие, что тут цикл while нужен, но как условие прописать? Алгоритм сравнения такой: файлы из каталога 1 поочередно сравнить с файлами из каталога 2, каталога 3 и каталога 4. И далее - из каталога 2 с файлами из каталога 3, 4 и т.д.

for S in 1 2 3 4; do
   for D in 1 2 3 4; do
      if [ $S -lt $D ]; then 
           echo "Compare source=$S destination=$D"
      fi
   done
done
Compare source=1 destination=2
Compare source=1 destination=3
Compare source=1 destination=4
Compare source=2 destination=3
Compare source=2 destination=4
Compare source=3 destination=4
anonymous ()
Ответ на: комментарий от valve59

Два вложенных цикла и условие. Тут нечего документировать.

-lt — меньше чем (less than), т.е. (S$ < $D)

anonymous ()

sort file 1 | uniq > file 1

Интересно, какая сволочь это могла посоветовать?
Конструкция '> file' опустошает файл, sort и uniq запускаются и выполняются параллельно и абсолютно асинхронно, так что содержимое файла в итоге зависит только от погоды на марсе.
1) См. man tempfile.
2) sort -u
И научись читать документацию вместо гуглежа по помойкам.

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

хм, ну я сначала нагуглил варианты, потом посмотрел, что они значат и как выполняются. проверил

 sort file 1 | uniq > file 1 
все нормально выполняется, дубликаты отбрасывает, файл переписывает с уникальными значениями, все как надо. зачем tempfile?

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

в самом деле, при вставке в цикл вышеуказанная строка затирает файл. Буду дальше думать

valve59 ()
sort file 1 | uniq > file 1

-->

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