2015-01-23 2 views
0

Я новичок в кодировании bash, поэтому заранее за ваше терпение.{awk: Command не найден

Я буду обрабатывать 100 000 изображений изображений в течение следующих недель. По мере поступления изображений у них есть необработанное имя, которое необходимо изменить. Имя необходимо изменить, просмотрев информацию для этого изображения в файле csv и переименовать соответствующим образом. Префикс и суффикс имени вместе указывают, с какой именно записью он связан, и в зависимости от того, в каком столбце указан суффикс, требуются разные соглашения о имени. Что я делаю не так????

#!/usr/bin/awk -f 

for file in *.NEF 

do 

{awk ' 
BEGIN { 
FS="," 
} 

raw_name=$file 
prefix="${file:0:3}" 
suffix="${file:4:4}" 

if ($28 ~ /$prefix/ && $24 ~ /$suffix/) 
{$100="New_prefix_1" "$raw_name";} 

else 
{ 
if ($28 ~ /$prefix/ && $25 ~ /$suffix/) 
{ $100="New_prefix_2" "$raw_name";} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $26 ~ /$suffix/) 
{$100="New_prefix_3" "$raw_name";} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $27 ~ /$suffix/) 
{$100="New_prefix_4" "$raw_name";} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $29 ~ /$suffix/) 
{$100= $4 "_" $2 "New_prefix_5" "$raw_name";} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $30 ~ /$suffix/) 
{$100= $4 "_" $2 "New_prefix_6" "$raw_name";} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $31 ~ /$suffix/) 
{$100= $4 "_" $2 "New_prefix_7" "$raw_name";} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $32 ~ /$suffix/) 
{$100= $4 "_" $2 "New_prefix_8" "$raw_name":} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $33 ~ /$suffix/) 
{$100= $4 "_" $2 "New_prefix_9" "$raw_name";} 
} 
else 
{ 
if ($28 ~ /$prefix/ && $34 ~ /$suffix/) 
{$100= $4 "_" $2 "New_prefix_10" "$raw_name";} 
} 
else 
{mv $file ~/Rename_error/$file.NEF} 
} 
END }' Data.csv 
+2

Ошибка говорит о проблеме довольно ясно '{awk' - это не команда, о которой знает оболочка. При этом есть и другие проблемы. '$ file' в awk-скрипте не делает то, что вы думаете. Оболочка не расширяет переменные в одинарных кавычках. У вас нет путаницы в раковине/awk относительно того, что вы можете делать где. У вас есть строки, такие как 'prefix = '$ {file: 0: 3}" (который является оболочкой) в самом скрипте awk и т. Д. –

+0

Удалите 'END}' и удалите '' '' перед 'awk'' , Кроме того, посмотрите синтаксис awk, я предлагаю 'man awk'. Кроме того, ваш хешбанг не должен быть awk, я верю, но bash или что-то еще. – ShellFish

ответ

1

Несколько ошибок в коде (см. Также комментарий Этана Рейснера). Быстрое исправление может быть таким. О, пожалуйста, отступом и отформатируйте свой код, он делает его более читаемым.

#! /bin/bash 

for file in *.NEF; do 
    raw_name=$file 
    prefix="${file:0:3}" 
    suffix="${file:4:4}" 

    awk -v raw_name="$raw_name" -v prefix="$prefix" -v suffix="$suffix" ' 
     BEGIN { 
      FS="," 
     } 

     { 
      if ($28 ~ /prefix/ && $24 ~ /suffix/) { 
       $100="New_prefix_1" raw_name 
      } elif ($28 ~ /prefix/ && $25 ~ /suffix/) { 
       $100="New_prefix_2" raw_name 
      } elif ($28 ~ /prefix/ && $26 ~ /suffix/) { 
       $100="New_prefix_3" raw_name  
      } elif ($28 ~ /prefix/ && $27 ~ /suffix/) { 
       $100="New_prefix_4" raw_name 
      } elif ($28 ~ /prefix/ && $29 ~ /suffix/) { 
       $100= $4 "_" $2 "New_prefix_5" raw_name 
      } elif ($28 ~ /prefix/ && $30 ~ /suffix/) { 
       $100= $4 "_" $2 "New_prefix_6" raw_name 
      } elif ($28 ~ /prefix/ && $31 ~ /suffix/) 
       $100= $4 "_" $2 "New_prefix_7" raw_name 
      } elif ($28 ~ /prefix/ && $32 ~ /suffix/) { 
       $100= $4 "_" $2 "New_prefix_8" raw_name 
      } elif ($28 ~ /prefix/ && $33 ~ /suffix/) { 
       $100= $4 "_" $2 "New_prefix_9" raw_name 
      } elif ($28 ~ /prefix/ && $34 ~ /suffix/) 
       $100= $4 "_" $2 "New_prefix_10" raw_name 
      } else 
       system('mv 'file' ~/Rename_error/'file'.NEF') 
      } 
     } 
    }' Data.csv 
done 

Обратите внимание, что этот встроенный awk-скрипт, кажется, плохо написан. Это не проверено, так как нет ввода и вывода проб.

+0

Здравствуйте, спасибо, что нашли время, чтобы посмотреть на код. В основном у меня много входящих .NEF-файлов, которые поступают с именем xxx_yyyy.NEF, где x = префикс и y = суффикс. Префикс тот же для 9999 файлов, и когда 9999 будет достигнуто, префикс будет затем изменен, например. от 000 до 001. С файлами .NEF поставляется файл csv, который содержит всю соответствующую информацию, например, является ли это калибровочным изображением или является ли это образ, который является точкой данных. –

+0

Вся необходимая информация для переименования файла содержится в строке (которая содержит 58 полей), которая уникально идентифицируется префиксом и суффикс вместе. Единственный способ, с помощью которого я смог определить строку, - это использовать awk. После того, как строка найдена, информация из других полей в файле csv должна быть добавлена ​​.NEF filename, например. семьи и рода ($ 4 и $ 2). –

+0

От того, что вы говорите, вероятно, это лучший способ сделать это. Я изменил в соответствии с инструкциями ShellFish и добавил некоторые команды эха, чтобы увидеть, какие переменные ниже для файла в * .NEF. $ raw_name возвращает * .NEF, $ префикс возвращает * .N и $ suffix возвращает F. Я также получаю синтаксическую ошибку в файле raw_name = $ со следующим (где строка 12 соответствует raw_name = $ file: context is \t \t} Элиф ($ 28 ~/префикс $/&& $ 26 ~/$ суффикса /) >>> {<<< AWK: незаконное заявление в исходной строке 12 AWK: ошибка синтаксиса в исходной строке 26 \t дополнительного} \t отсутствующей) –