Сценарий оболочки для обработки файлов - PullRequest
1 голос
/ 17 марта 2010

Мне нужно написать сценарий оболочки для обработки огромной папки почти из 20 уровней. Мне нужно обработать каждый файл и проверить, какие файлы содержат такие строки Выбрать вставить обновление

Когда я имею в виду строку, она должна занимать строку, пока я не найду точку с запятой в этом файле. Я должен получить такой результат

C:/test.java   select * from dual
C:/test.java   select * from test
C:/test1.java  select * from tester
C:/test1.java  select * from dual

и т. Д. Теперь у меня есть скрипт для чтения всех файлов

#!bin/ksh

FILE=<FILEPATH to be traversed>
TEMPFILE=<Location of Temp file>
cd $FILE    
for f in `find . ! -type d`; 
do
cat $FILE/addedText.txt>>$TEMPFILE/newFile.txt
cat $f>>$TEMPFILE/newFile.txt
rm $f
cat $TEMPFILE/newFile.txt>>$f
rm $TEMPFILE/newFile.txt
done

У меня очень мало знаний о awk и sed, чтобы продолжить чтение каждого файла и добиться того, чего я хочу.

1 Ответ

1 голос
/ 17 марта 2010

если у вас есть GNU find / gawk

find /path -type f -name "*.java" | while read -r FILE
do
  awk -vfile="$FILE" 'BEGIN{RS=";"}
  /select|update|insert/{
     b=gensub(/(.*)(select|update|insert)(.*)/,"\\2\\3","g",$0)
     gsub(/\n+/,"",b)
     print file,b
  }
  ' "$FILE"

done

если вы используете Solaris, используйте nawk

find /path -type f -name "test*file" | while read -r FILE
do
  nawk -v file="$FILE" 'BEGIN{RS=";"}
  /select/{ gsub(/.*select/,"select");gsub(/\n+/,"");print file,$0; }
  /update/{ gsub(/.*update/,"update");gsub(/\n+/,"");print file,$0; }
  /insert/{ gsub(/.*insert/,"insert");gsub(/\n+/,"");print file,$0; }
  ' "$FILE"
done

Обратите внимание, что это упрощенный случай. ваш оператор SQL может быть более сложным.

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