Парсинг файла сценария оболочки BASH [новичок] - PullRequest
1 голос
/ 29 декабря 2011

Я пытаюсь написать bash-скрипт, который проходит строку за строкой (игнорируя заголовок), извлекает имя файла из начала каждой строки, а затем находит файл с этим именем в одном каталоге и перемещает его в другой каталог. Я буду обрабатывать сотни этих файлов в цикле и перемещать более миллиона отдельных файлов. Пример файла:

ImageFileName    Left_Edge_Longitude    Right_Edge_Longitude   Top_Edge_Latitude  Bottom_Edge_Latitude

21088_82092.jpg:  -122.08007812500000  -122.07733154296875    41.33763821961143    41.33557596965434

21088_82093.jpg:  -122.08007812500000  -122.07733154296875    41.33970040427444    41.33763821961143

21088_82094.jpg:  -122.08007812500000  -122.07733154296875    41.34176252364274    41.33970040427444

Я хотел бы проигнорировать первую строку, а затем взять 21088_82092.jpg в качестве переменной. Имена файлов могут не всегда иметь одинаковую длину, но они всегда будут иметь формат digits_digits.jpg

Любая помощь для эффективного подхода очень ценится.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

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

pax:~$ cat qq.in
ImageFileName     Left_Edge_Longitude  Right_Edge_Longitude
21088_82092.jpg:  -122.08007812500000  -122.07733154296875
21088_82093.jpg:  -122.08007812500000  -122.07733154296875
21088_82094.jpg:  -122.08007812500000  -122.07733154296875

pax:~$ awk -F: '/^[0-9]+_[0-9]+.jpg:/ {
        printf "cp /srcdir/%s /dstdir\n",$1
    } {}' qq.in

cp /srcdir/21088_82092.jpg /dstdir
cp /srcdir/21088_82093.jpg /dstdir
cp /srcdir/21088_82094.jpg /dstdir

Вы записываете выходные данные этого сценария (последние три строки) в другой файл, тогда этот файл является вашим сценарием для выполнения фактических копий.

0 голосов
/ 29 декабря 2011

Это должно помочь вам начать:

$ tail -n +2 input | cut -f 1 -d: | while read file; do test -f $dir/$file && mv -v $dir/$file $destination; done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...